我貌似好久没在项目里用到@class了
2018-06-29 10:38
232 查看
#include 玩C的都知道,#import玩OC的都知道,@class这个貌似真的很少用啊,这货到底杂用,好处是啥,为啥要用?
首先来个项目。默认ViewController,再来一个SViewController,顺带两个方法
来看看吧.h中引入另一个类的
然后发现
咦?看起来,是识别到这个类了,但是为啥就不让对这个类操作呢?
再试试调用其中的方法
发现,不管是类方法还是实例方法,都不能,我理解的是,@class只是告诉编译器,后边跟的,这是个类,至于好处,
这是看到的一个大神的说法,我理解的意思就是,引用头文件,会产生相互依赖关系,即:#import 会包含引用类的所有信息(内容),包括引用类的变量和方法@class仅仅是告诉编译器有这么一个类,具体这个类里有什么信息,完全不知,如果有上百个头文件都#import了同一个文件,或者这些文件都被引入,那么一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍,编译效率非常低,相对来讲,使用@class方式就不会出现这种问题了这种情况下
还有还有,一般开发中,恕我直言,你真的会很有必要在.h中使用别的头文件么?除了继承的父类 、 实现某个 protocol一般如果实在是需要,用@class就好了,没必要引入头文件,头文件放在类的.m中,这样子,而且在.m中可以有效减少交叉引用,其实Fundition和UIKit框架中全部使用.m内引用,.h内用Class声明的方式,这样做对app运行时没有影响的,但是以上思路,可以提高编译器预处理的速度,你的项目越大,这个影响就越明显。
首先来个项目。默认ViewController,再来一个SViewController,顺带两个方法
来看看吧.h中引入另一个类的
然后发现
咦?看起来,是识别到这个类了,但是为啥就不让对这个类操作呢?
再试试调用其中的方法
发现,不管是类方法还是实例方法,都不能,我理解的是,@class只是告诉编译器,后边跟的,这是个类,至于好处,
这是看到的一个大神的说法,我理解的意思就是,引用头文件,会产生相互依赖关系,即:#import 会包含引用类的所有信息(内容),包括引用类的变量和方法@class仅仅是告诉编译器有这么一个类,具体这个类里有什么信息,完全不知,如果有上百个头文件都#import了同一个文件,或者这些文件都被引入,那么一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍,编译效率非常低,相对来讲,使用@class方式就不会出现这种问题了这种情况下
还有还有,一般开发中,恕我直言,你真的会很有必要在.h中使用别的头文件么?除了继承的父类 、 实现某个 protocol一般如果实在是需要,用@class就好了,没必要引入头文件,头文件放在类的.m中,这样子,而且在.m中可以有效减少交叉引用,其实Fundition和UIKit框架中全部使用.m内引用,.h内用Class声明的方式,这样做对app运行时没有影响的,但是以上思路,可以提高编译器预处理的速度,你的项目越大,这个影响就越明显。
相关文章推荐
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方式
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- 【android 反编译】Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
- 第六周项目2-my array class
- pidgin的fetion插件——用到了开源项目gradetwo
- SSM框架开发项目--用到的注解记录,及详解。(先记录,后研究,再总结---未完)
- 技巧:使用User Control做HTML生成(bs分销项目用到)
- cocos2dx-lua 对lua项目中class(sub,super)的理解
- 最近项目用到关键技术概况
- svn导出项目到myeclipse,运行报ClassNotFoundException
- flex4 一些项目用到的技术