objective-c中#import和@class的区别
在Objective-C中,可以使用#import和@class来引用别的类型, 但是你知道两者有什么区别吗?
@class叫做forward-class, 你经常会在头文件的定义中看到通过@class的引用,原因就是当你只用@class来引入一个类时, 编译器知道有这么一个类,也就是说它能识别Engine *engine;
而在implementation文件中,如果你想要访问engine.price, 编译器就会出错, 即使你用了@class引入了.这时需要使用的其实是#import 来引入Engine.h这个头文件,它包括这个类的所有的定义, 它知道你有定义一个price, 而通过@class引入的除了类本身之外,没有具体的信息.
更详细的分析:
在Objective-c中,当一个类需要引用另一个类的接口时,需要在类的头文件中建立被引用类的指针
Person.h
@interface Person: NSObject
{
Woman *woman;
Man *man;
}
.......
如果直接编译,会出错,因为不知道Woman,Man是什么。
这时有两个选择,一是import这两个被引用类的头文件,另一个是使用@class申明Woman和Man是类名,二者的区别:
1. import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你;
2. 在头文件中,一般只需要知道被引用的类的名称就可以了,不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称,而在类的实现部分,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。
3. 在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次被引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用@class则不会。
4. 如果有循环依赖关系,如:A–>B,
B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。
所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。
在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.
分享到:
相关推荐
tHIS IS A GOOD THING I NEED
uC_OC_II的源代码 用于一款新的单片机时 需要根据需要 修改
vga_utility_oc_guru_2.rar是技嘉发布的一款显卡调整工具,也可以称之为显卡超频工具,它可以让你调节显卡的各项参数,如核心频率速度及核心电压,在允许的范围内调整显卡参数可以增强显卡的性能。亦可调显卡风扇的...
SIMP-OC_OC优化准则_OC准则法_cloudo9a_matlab_top99_源码.zip
SIMP-OC_OC优化准则_OC准则法_cloudo9a_matlab_top99_源码.rar.rar
用VHDL制作的I2C控制器,是一个component,之间添加就可以使用。
matlab一种图像分割代码OD_OC_seg 添加一名作者 导师:Jayanthi Sivaswamy 教授 视觉信息技术中心,IIIT-海得拉巴 () 我们正在发布用于在视网膜彩色眼底图像中分割视盘和视杯的 Matlab 代码。 该代码可免费获取,以...
偏移量转换器OC_37145偏移量转换器OC_37145
Matebook_14_2020_OC_v1.7.7z
Multi-focus image fusion using a bilateral gradient-based sharpness criterion的算法源代码
CJ系列输出单元 CJ1W-OC_OA_OD
MOX OC_RTU_Getaway和第三方DP从站Profibus DP 通信配置和编程实例
让oc像swift那样给@protocol协议添加方法的默认实现教程加demo,例子里面实现了xib文件,遵守协议以后直接就能被调用的例子
可以解决结构的轻量化问题,代码简单,可以方便添加其他的东西
ScrollView嵌套ScrolloView(UITableView 、UICollectionView)解决方案, 支持OC _ Swift(持续更新中...)实现原理:.zip
04-WeiBo-OneDay-OC_Version.zip
OC_经典笔记——delegate(代理~).pdf
跑马灯,用简单的控件实现一些文字变换颜色运动
Dell_OPTIPLEX5040的黑苹果OC启动文件,集成显卡HD530,网卡,声卡都完美驱动。