很多刚开始学习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文件中,无论参与的项目大小,养成良好的编程习惯非常重要。
分享到:
相关推荐
在iOS开发过程中,我们在一些源码中经常会看到导包的时候有的用#import进行导包,但是有的的时候也会看到用@class进行导包,那么这两种方式有什么区别呢? 一 @class和#import的主要区别 首先说一下最主要的区别:...
iOS中@功能的实现.zip,iOS中@功能的实现
1. import会包含这个类的所有信息,包括实体变量和方法(.h文件中),而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,后面会再告诉你。 2. 在头文件中, 一般只需要知道被引用的类...
IOS高访新浪微博界面,处理@#链接 特殊字符 ,排版整齐 这个是http://download.csdn.net/detail/rhljiayou/6760745 此Demo的升级版,有些问题的改正
iOS 面试题: Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?...2.#import 跟#include 又什么区别,@class呢, #import<> 跟 #import”"又什么区别?
IOS高访新浪微博界面,处理@#链接 特殊字符 ,排版整齐
解决ios sdk9 无法class-dump导出framework头文件 也可以自己重新编译一份https://github.com/nygard/class-dump
谁都能看得懂的实现方式; 推荐给大家一个swift扩展库,支持cocoapods,地址:https://github.com/CoderZCC/ZCategoryTool, 欢迎Star
IOS 头文件导入-@class注意事项总结 一,导入头文件有两种不同的方法: 使用引号或者使用尖括号,例如,#import 和#import “Tire.h”.带尖括号的语句是用来导入系统头文件的,而带引号的语句则说明导入的是项目本地...
对于#import,我想做过iOS开发的人应该都不陌生。在开发过程中,当我们需要声明某一个类时,都需要去引用。而#imclude的话,在我们学习C时就已经知道了,他的作用也是引用声明的意思。在表面上他们的作用似乎都是...
iOS开发中自动生成1x2x3x图片,并自动命名。快速便捷。
说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中。本文介绍如何不借助第三方框架实现iOS开发中得文件上传。 由于过程较为复杂,因此本文只贴出部分关键代码。 主控制器的关键代码: 代码如下:...
传入源文件URL,或则AVURLAsset资料对象,直接返回文件路径path,或则URL, 里边有两种压缩方式为,了大家方便不上代码了, 直接上文件
ios多线程开发的常用四种方式和基本使用,pthread、NSThread、NSOperation\NSOperationQueue、GCD
iOS两种获取通讯录方式,兼容性高
ios两种方式实现无限循环轮播图
解决使用七牛IOS开发后,代码报错,缺少#import "HappyDNS.h" 的问题
ios 自带表情 转义字符实现 本文件中的表情可直接用右测的转义字符生成