现在的位置: 首页 > 综合 > 正文

iOS开发-Objc-@class深入理解

2018年04月08日 ⁄ 综合 ⁄ 共 813字 ⁄ 字号 评论关闭

@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

抱歉!评论已关闭.