#import,#include,@class都可以引入头文件,但是三者有区别。
其实这样写的目的很明确,万一还有类(暂时命名为c)需要导入a.h,a直接#import "b.h"会给这个c强行插入了b的编译,其实对c来说也许是不必要的。
//b.h
#import "a.h"
@interface b:NSObject
@end
//a.h
#import "b.h"
@interface a:NSObject
@end
#import和#inclue都是引入头文件,但是当发生头头文件循环引用时,#include直接死循环,#import可以编译成功,但是会有其中一个时不编译不成功的。
为了避免这种情况,如果只是在头文件声明不需要体现具体实现的话,可以选择使用@class向前声明,这样可以减少引入头文件数量,同时也减少了头文件依赖关系的复杂度。如果在实现文件需要用到具体实现的话,在实现文件引入头文件,反正尽可能延迟。
//a.h
@class "b.h"
@interface a:NSObject
@end
//a.m
#import "b.h"
@implementation a
@end
其实这样写的目的很明确,万一还有类(暂时命名为c)需要导入a.h,a直接#import "b.h"会给这个c强行插入了b的编译,其实对c来说也许是不必要的。
所以总结如下:
#include在oc比较少用,#import尽量晚导入,@class在没有具体实现要求时可以用。