我想知道在您导入Objective-C中的文件时,是什么决定是否允许您使用<Header.h>
或"Header.h"
。到目前为止,我的观察结果是您在项目中使用引号""
来获取实现源,并在引用库或框架时使用尖括号<>
。
但这究竟是怎么回事?为了让我自己的类使用括号,我需要做些什么?现在Xcode不允许我为自己的标题做这件事。
另外,通过查看一些框架标题,我看到标题引用了<frameworkname/file.h>
。 如何运作?它看起来很像Java中的包,但据我所知,Objective-C中没有包这样的东西。
答案 0 :(得分: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。
答案 1 :(得分:13)
在C中,惯例是&lt;&gt;中的头文件在“系统”目录中搜索括号,在用户或本地目录中搜索“”。
我猜,系统和本地的定义有点模糊。我相信它在包含路径或CPPFLAGS中的系统目录中查找,并且使用-I指定给编译器的本地目录或目录搜索“header.h”文件。
我认为它与Objective-C类似。
答案 2 :(得分:6)
使用“&lt;&gt;”导入您自己的课程你必须将头文件(* .h)放在编译器的lib文件夹中,或者将一个SYSTEM VARIABLES ponting设置到你的lib文件夹中。
答案 3 :(得分:2)
或者将Always Search User Path
设置为YES
,以便您可以使用尖括号。
答案 4 :(得分:1)
""
-Quotation marks
在与此文件(出现#import行的.m文件)相同的文件夹中查找命名文件。
<>
-Angle brackets
在构建设置中提供的各种标题搜索路径中寻找命名文件。 (这些搜索路径是自动为您设置的,通常您无需修改它们。)
通常,您将使用尖括号来引用Cocoa API拥有的头文件,并使用引号引用所编写的头文件。如果您对#import指令的导入感到好奇,请选择它(在Xcode中),然后选择“文件”→“快速打开”以显示指定头文件的内容。
在此处了解更多-https://www.oreilly.com/library/view/programming-ios-6/9781449365783/ch01s10.html
答案 5 :(得分:1)
带有尖括号,例如<Foundation/Foundation.h>
导入系统文件。
您使用双引号"Person.h"
导入本地文件(您创建的文件)并告诉编译器在哪里寻找它们。
答案 6 :(得分:0)
偶然发现同样的问题,有两种类型的搜索路径是Xcode:
User Header Search Paths
Header Search Paths
如果您将自己的包含文件夹添加到页眉搜索路径中,则可以使用带角度的括号而不会出现任何问题。
答案 7 :(得分:0)
<Name.h>
-Angle brackets
告诉预处理器在特殊预先指定的系统目录中搜索。例如,您导入诸如<UIKit/UIKit.h>
之类的系统标题或添加的框架
"Name.h"
-Quotation marks
告诉预处理器在当前目录中进行搜索。如果找不到标头,则预处理器尝试使用<Name.h>
。通常,您应该将其与项目文件一起使用
答案 8 :(得分:0)
如果这是一个 Xcode 项目并且您希望将其包含在框架中,请打开您希望包含的头文件。然后,打开 Xcode 最右边的选项卡,在“Target Membership”下,单击您希望文件可用的框架。
例如如果您的框架是 AlphaTools,而您的标头是 AceHeader,那么您将在 Target Membership 上选择 AlphaTools,以便您可以访问 < AlphaTools/AceHeader.h
答案 9 :(得分:-3)
什么是标题文件? 头文件包含函数和变量的定义,可以使用预处理器#include语句将其合并到任何C程序中。每个编译器都提供标准头文件,涵盖了一系列领域,字符串处理,数学,数据转换,打印和变量读取。 Ex- #include它包含有关输入的信息,如scanf(),并在编译器中输出像printf()函数等。
1)#INCLUDE: - 它是在主要功能处理之前处理的预处理器。 预处理器的主要工作是初始化程序环境,即带有头文件的程序。 2)·H: - (头文件)头文件是扩展名为.h的文件,它包含C函数声明和宏定义,并在多个源文件之间共享。 Q)头文件有两种类型:程序员编写的文件和编译器附带的文件? A)在尖括号中 Angular-bracket形式用于“全局”包含 - 那些在传递给编译器的include路径上找到的那些(例如#include) 它用于库函数的使用,它在编译器中都已准备就绪。 在C中,惯例是&lt;&gt;中的头文件。在'system'目录中搜索括号 B)引号: - “header.h” 引用的表单用于“本地”包含文件(您需要指定当前文件的相对路径,例如#include“headers / my_header.h”) 在C中,惯例是在用户或本地目录中搜索“”中的头文件。 其中一个文件包含在另一个文件中。(文件包含)。 它可以用于两种情况: 案例1:如果我们有一个非常大的程序,代码最好分成几个不同的文件,每个文件包含一组相关的函数。 案例2:在我们编写的所有程序中,我们最多需要一些函数和微观定义。 实施例