IOS开发#import和#include以及@class的区别
一、#include和@class的区别
1. 一般来说、导入objective c的头文件时用#import、包含c/c 头文件时用#include
2. #import 确定一个文件只能被导入一次、这使你在递归包含中不会出现问题、<标记>、所以、#import比起#include的好处就是不会引起交叉编译
二、#import && #class:
1、import会包含这个类的所有信息、包括实体变量和方法(.h文件中)、而@class只是告诉编译器、其后面声明的名称是类的名称、至于这些类是如何定义的、后面会再告诉你
2、在头文件中、 一般只需要知道被引用的类的名称就可以了、 不需要知道其内部的实体变量和方法、所以在头文件中一般使用@class来声明这个名称是类的名称、 而在实现类里面、因为会用到这个引用类的内部的实体变量和方法、所以需要使用#import来包含这个被引用类的头文件
备注:#import 就是把被引用类的头文件走一遍、即把.h文件里的变量和方法包含进来一次、且仅一次、而@class不用、所以后者编译效率更高
3. 在编译效率方面考虑、如果你有100个头文件都#import了同一个头文件、或者这些文件是依次引用的、如A–>B, B–>C, C–>D这样的引用关系、当最开始的那个头文件有变化的话、后面所有引用它的类都需要重新编译、如果你的类有很多的话、这将耗费大量的时间、而是用@class则不会
4. 如果有循环依赖关系、如:A–>B, B–>A这样的相互依赖关系、如果使用#import来相互包含、那么就会出现编译错误、如果使用@class在两个类的头文件中相互声明、则不会有编译错误出现
备注:实践证明、A,B相互#import不会出现编译错误、因为<标记>处已经说明#import时文件只被导入一次、所以此条不成立
三、总结
1. 如果不是c/c 、尽量用#import
2. 能在实现文件中#import、就不在头文件中#import
3. 能在头文件中@class 实现文件中#import、就不在头文件中#import
推荐阅读
-
ios原生开发和前端开发(app原生开发和非原生的区别)
-
IOS开发(45)之delegate和Notification的区别
-
详解iOS开发中的转场动画和组动画以及UIView封装动画
-
iOS---------开发中 weak和assign的区别
-
iOS学习——@class和#import的区别
-
【iOS开发】UITableView中dequeueReusableCell带indexpath方法和不带的区别
-
html中关于name和id以及class的区别介绍
-
IOS开发(45)之delegate和Notification的区别
-
html中关于name和id以及class的区别介绍
-
详解iOS开发中的转场动画和组动画以及UIView封装动画