在OC中,我们引用一个头文件,可以使用#import "SomeFile.h"
,也可以使用#import <SomeFile.h>
,那么这两种方式有什么区别呢?
和在C/C++中一样,使用""
引入的是本地工程的文件,而使用<>
引入的是系统库的文件。
import""
在使用中,""
会先查找用户目录下文件是否存在,或者说是User Header Search Paths,如果不存在,会继续查找库目录,也就是System Header Search Paths。
import<>
而<>
只会查找库目录(System Header Search Paths),如果查找失败,并不会继续查找用户目录。所以对于不熟练的用户,一般都推荐直接使用""
。
此外,在Xcode工程中使用cocoaPods引入的库,应该使用哪一种呢?答案是最好使用<>
。因为使用cocoaPos导入的库,也算是系统引用库的一种,这种情况下虽然也可以使用""
,但是基于区分来源的目的,建议还是使用<>
。
@class
使用@class
仅仅是告诉编译器这是一个类,并不会因入该类的其他信息,而我们所关心的也仅此一点,而不需要知道该类的内部有哪些属性和方法,因此使用@class
可以提升编译性能。一般情况下,我们在.h头文件中使用@class
,可以以提升编译性能;而在.m实现文件中,往往就需要知道类的内部信息了,这时就需使用#import
来引入这些信息。在iOS的很多源文件的.h文件中很多都采用@class
的方式进行导包。
为了避免两个类之间循环引用,我们在某一个类的.h文件中用@class
进行导入。例如:对于循环依赖关系来说,比方A类引用B类,同时B类也引用A类,这种情况,我们都用#import
进行这种嵌套引用的代码在编译时是会报错。
#include
一般来说,导入OC的头文件时用#import,导入c/c++头文件用#include。include
相当于拷贝文件中的声明内容,多次使用就会报重复定义的错误。如: classA,classB都引用了classC,而classD中又引用classA与classB,就会报重复引用的错误。#include
它是使用预处理指令防止重复包含,如果没有写预处理指令,则无法防止重复包含问题。但是使用两次#import
的话,不会报错,所以它可以解决重复导入的问题,它会做一次判断,如果已经导入一次就不导入了。