#import使用尖括号<>和引号“”

问题描述 投票:109回答:8

我想知道当你在Objective-C中导入文件时,是什么决定你是否被允许使用<Header.h>"Header.h"。到目前为止,我的观察结果是你在项目中使用引号""来获得实现源,并在引用库或框架时使用尖括号<>

但究竟是如何运作的呢?为了让我自己的类使用括号,我需要做些什么?现在Xcode不允许我为自己的标题做这件事。

另外,通过查看一些框架标题,我看到标题使用<frameworkname/file.h>相互引用。这是如何运作的?它看起来很像Java中的包,但据我所知,Objective-C中没有包这样的东西。

objective-c syntax import packages
8个回答
112
投票

Objective-C与C / C ++有共同之处;引用的表单用于“本地”包含文件(您需要指定当前文件的相对路径,例如#include "headers/my_header.h"),而角括号形式用于“全局”包括 - 那些在包含路径上的某些地方找到到编译器(例如#include <math.h>)。

因此,要使用< >而不是" ",您需要将头目录的相对路径或绝对路径传递给编译器。有关如何在Xcode中执行此操作的信息,请参阅"How to add a global include path for Xcode"

有关更多信息,请参阅this MSDN page


13
投票

在C中,惯例是在<system'目录中搜索<>括号中的头文件,在用户或本地目录中搜索“”。

我猜,系统和本地的定义有点模糊。我认为它在包含路径或CPPFLAGS中的系统目录中查找,并且使用-I指定的本地目录或目录搜索“header.h”文件。

我认为它对Objective-C的工作方式类似。


6
投票

要使用“<>”导入自己的类,必须将头文件(* .h)放在编译器的lib文件夹中,或者将一个SYSTEM VARIABLES ponting设置到lib文件夹中。


2
投票

或者将Always Search User Path设置为YES,以便您可以使用尖括号。


1
投票

"" - Quotation marks在与此文件相同的文件夹中查找命名文件(发生#import行的.m文件)。

<> - Angle brackets在构建设置中提供的各种头搜索路径中查找命名文件。 (这些搜索路径是自动设置的,您通常不需要修改它们。)

通常,您将使用尖括号来引用Cocoa API拥有的头文件和引号来引用您编写的头文件。如果您对#import指令导入的内容感到好奇,请选择它(在Xcode中)并选择“文件”→“快速打开”以显示指定头文件的内容。

在这里阅读更多 - https://www.oreilly.com/library/view/programming-ios-6/9781449365783/ch01s10.html


1
投票

使用角括号,例如<Foundation/Foundation.h>你导入系统文件。

您使用双引号"Person.h"导入本地文件(您创建的文件)并告诉编译器在哪里查找它们。


0
投票

偶然发现同样的问题,Xcode有两种类型的搜索路径:

User Header Search Paths
Header Search Paths

如果您将自己的包含文件夹添加到页眉搜索路径中,则可以使用带角度的括号而不会出现任何问题。


-3
投票

什么是头文件?头文件包含函数和变量的定义,可以使用预处理器#include语句将其合并到任何C程序中。每个编译器都提供标准头文件,涵盖了一系列领域,字符串处理,数学,数据转换,打印和变量读取。 Ex- #include它包含有关输入的信息,如scanf(),以及在编译器中输出像printf()函数等。

INCLUDE

1)#INCLUDE: - 在主要功能处理之前处理的预处理器。预处理器的主要工作是初始化程序环境,即带有头文件的程序。 2).h: - (头文件)头文件是扩展名为.h的文件,它包含C函数声明和宏定义,并在多个源文件之间共享。 Q)头文件有两种类型:程序员编写的文件和编译器附带的文件? A)在角括号中,Angular-bracket形式用于“全局”包括 - 那些在传递给编译器的include路径上找到的那些(例如#include)它用于使用库函数,它在编译器中都已准备就绪。在C中,惯例是在<system'目录中搜索<>括号中的头文件.B)引号: - “header.h”引用的表单用于“本地”包含文件(需要指定相对路径来自当前文件,例如#include“headers / my_header.h”)在C中,惯例是在用户或本地目录中搜索“”中的头文件。其中一个文件包含在另一个文件中。(文件包含)。它可以用于两种情况:情况1:如果我们有一个非常大的程序,代码最好分成几个不同的文件,每个文件包含一组相关的函数。案例2:在我们编写的所有程序中,我们最多需要一些函数和微观定义。防爆

© www.soinside.com 2019 - 2024. All rights reserved.