经典讲解:@class和 #import
来源:互联网 发布:所有股票数据 编辑:程序博客网 时间:2024/06/03 17:02
很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在m文件中,而h文件仅仅使用@class进行声明,不禁纳闷起来,为什么不直接把#import放到h文件中呢?
这是因为h文件在修改后,所有import该h文件的所有文件必须重 新build,因此,如果把#import写在h文件中,import该h文件的文件也就会产生不必要的编译,增加编译时间,特别是在项目文件多的情况 下。想象一下,如果只是修改一个h文件而导致上百个文件不必要的编译,那是一件多么让人纠结的事情。。。
对于@class只是告诉编译器有这个class,请不要报错或警告,因此不会给编译造成影响。
什么时候用@class这种方式声明比#import好呢?
stackoverflow上的高手们给了不少建议:
Randy Marsh:
When I develop, I have only three things in mind that never cause me any problems.
- Import super classes
- Import parent classes (when you have children and parents)
- Import classes outside your project (like in frameworks and libraries)
For all other classes (subclasses and child classes in my project self), I declare them via forward-class.
Justin:
Simple answer: You #import or #include when there is a physical dependency. Otherwise, you use forward declarations (@class MONClass ,struct MONStruct , @protocol MONProtocol ).
Here are some common examples of physical dependence:
- Any C or C++ value (a pointer or reference is not a physical dependency). If you have aCGPoint as an ivar or property, the compiler will need to see the declaration ofCGPoint .
- Your superclass.
- A method you use.
最后,我建议还是养成良好的import习惯,不要偷懒都把import放在h文件中,无论参与的项目大小,养成良好的编程习惯非常重要。
- 经典讲解:@class和 #import
- #include和#import "" <>和@class区别讲解
- #include #import @class 讲解
- #include #import @class 讲解
- #include #import @class 讲解
- #include #import @class 讲解
- #include #import @class 讲解
- #include #import @class 讲解
- #include #import @class 讲解
- @class和#import
- import和@class
- @Class和import区别
- @class关键字和#import
- @class 和 #import 区别
- #import和@class关键字
- @class和#import
- #import和@class
- ios-@class和#import
- C语言之数组
- leetcode|33|Search in Rotated Sorted Array
- C语言之字符串
- Android/iphone手机通过声波初始化智能设备的WIFI信息
- C语言之指针简析
- 经典讲解:@class和 #import
- HDOJ 题目4096 BestCoder Sequence(数学,水)
- 黑马程序员Android第55期——mysql数据库
- 看《被偷走的五年》,被感动
- Could not initialize master info structure; more error messages can be found in the MySQL error log
- NGINX基本模块与配置
- 1066. Root of AVL Tree (25)
- CFormView创建后有时不显示控件
- 2015年2月2日工作日志