@class与循环依赖关系
在OC中,导入(import)头文件之后,会产生很多的依赖关系,产生依赖关系的原因是,OC需要某些信息才能正常工作,比如:在一个类的.h中或者.m需要用到某些实例变量或者方法;但有时候我们在.h文件中只需要使用类名即可,不需要知道那个类的具体的方法,和实例变量,这样在OC中的解决方案是使用@class只是说明一下,这是个类而已,只需要使用指针来引用他.而不需要导入该文件,这样也不会导致编译错误!
#import<Foundation/Foundation.h> //#import” Engine.h” //#import”Tire.h” //注释掉该两行语句后就可以使用@class了 @class Engine; @property(strong) Engine *engine; //此时需要提前说明 ,Engine是一个类 @class Tire; @end
总结使用@class的好处和场合:
1.在.h类的声明文件中,如果只是用了类的指针而没有使用类的方法和实例变量,可以使用@class代替#import,可以避免没必要的引用. 2.使用#import来引入该类的话,首先需要编译该类,而使用@class不需要,他只是说明这是个类而已,不需要提前编译,提高了编译效率! 3.但是如果使用了外部类的方法,则只能使用#import不能使用@class否则,编译器会找不到该方法 4.对于循环依赖关系,只能使用@class:如A.h导入了B.h,B.h导入A.h这样一个头文件的编译需要等到对方编译才行,导致了编译错误,这时候只能使用@class! 5.如果在定义一个类时,需要提前使用类来声明一个对象,那么就必须使用@class进行声明,以免导致编译错误; 如果是 协议 同理,使用@protocol提前声明
原文地址http://blog.csdn.net/yangbingbinga/article/details/38536717