iOS开发-Objc-@class深入理解
2014-08-13 14:48
363 查看
@class与循环依赖关系
在OC中,导入(import)头文件之后,会产生很多的依赖关系,产生依赖关系的原因是,OC需要某些信息才能正常工作,比如:在一个类的.h中或者.m需要用到某些实例变量或者方法;但有时候我们在.h文件中只需要使用类名即可,不需要知道那个类的具体的方法,和实例变量,这样在OC中的解决方案是使用@class只是说明一下,这是个类而已,只需要使用指针来引用他.而不需要导入该文件,这样也不会导致编译错误!
总结使用@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
相关文章推荐
- objectIOS基础:深入理解Objective-c中@class的含义
- IOS基础:深入理解Objective-c中@class的含义
- IOS基础:深入理解Objective-c中@class的含义
- iOS开发~UI布局(三)深入理解autolayout
- iOS基础深入理解 Objective中@class的含义
- IOS基础:深入理解Objective-c中@class的含义
- iOS:iOS8开发 深入理解autolayout(3)
- iOS开发-Objc arrayWithCapacity: 深入分析
- IOS基础:深入理解Objective-c中@class的含义
- iOS开发——修复bug系列一objc-class-ref in UserSettingController.o
- IOS基础:深入理解Objective-c中@class的含义
- 【iOS开发】观察者模式-通知的使用及深入理解
- IOS基础:深入理解Objective-c中@class的含义
- iOS开发 Undefined symbols for architecture i386: _OBJC_CLASS_$_XXX" referenced from: error
- IOS基础:深入理解Objective-c中@class的含义
- ios开发点滴-"_OBJC_CLASS_$_MBProgressHUD"报错解决办法
- IOS基础:深入理解Objective-c中@class的含义
- iOS基础:深入理解Objective-c中@class的含义
- iOS开发:深入理解GCD 第二篇(dispatch_group、dispatch_barrier、基于线程安全的多读单写)
- iOS开发:深入理解GCD 第一篇