Objective-C中@class和#import的有关问题(转载)
Objective-C中@class和#import的问题(转载)
Objective-C中@class和#import的问题。参考。 假设,有两个类:ClassA和ClassB,两个之间相互使用到,即构成了circular dependency(循环依赖)。如果在头文件里面只用#import把对方的头文件包含进来(构成circular inclusions,循环包含),则编译器会报错: Expected specifier-qualifier-list before ‘ClassA’ 或者 Expected specifier-qualifier-list before ‘ClassB’ 为了避免循环包含,在ClassA.h文件里面用@class classB把classB包含进来,同样,在ClassB.h文件里面用@class ClassA把ClassA包含进来。@class指令只是告诉编译器,这是个类,保留个空间来存放指针就可以了。 接下来,很可能在ClassA.m和ClassB.m中会有访问包含进来对象的成员的情况,这时必须让编译器知道更多信息,比如那个类有些什么方法可以调用,就必须用#import,再次把用到的类包含进来,告诉编译器所需要的额外信息。 否则,编译器会警告: warning: receiver ‘ClassA’ is a forward class and corresponding @interface may not exist 还有另一种情况,使用有Categories的类,要在.h头文件里用#import把Categories包含进来。 总之,使用原则是: