IOS强化知识(2)@class的运用
来源:互联网 发布:ali个人域名怎么转企业 编辑:程序博客网 时间:2024/06/03 08:10
1、为什么使用@class
与C++语言一样,OC也需要一个头文件(h文件),一个实现文件(m文件)。当你引用其他类的时候,你就需要引入头文件。虽然引用头文件没有任何问题,但是如果你不想知道这个类的细节,只想知道它仅仅是个类的话,引用头文件可能显得多余,而且会增加编译的时间。用@class的话,你可以不引入任何头文件,就能让编译器知道某个它是一个类。例如:
@class B;
@interface A:NSObject
@property B* b;
@end;
极端情况讲,如果有成千上万个类都引入同一个头文件,当这个头文件所对应的类发生变化和改动,那么这些引入头文件的类都需要重新编译,而@class 不受此影响。
@class还能解决一个重要的问题,就是依赖循环关系。即当两个类相互引用的时候,不管你先引用哪一个头文件,都会出现另一个类未定义。比如:
//// A.h
@interface A:NSObject
@property B* b; /////先引入A.h B此时未定义 编译出现错误
@end;
//// B.h
@interface B:NSObject
-(void)setFriend:(A*)a; ////先引入B.h A此时未定义 编译出现错误
@end;
我们通过@class 轻松解决这个问题
//// A.h
@class B;
@interface A:NSObject
@property B* b; /////前向声明B 编译通过
@end;
//// B.h
#import "A.h"
@interface B:NSObject
-(void)setFriend:(A*)a; ////引入A.h A被声明,编译通过 注:A类也可以进行前向声明
@end;
2、有时候必须引入头文件
当你需要继承的时候,你必须引入头文件,知道其完整的定义。当你实现某个协议的时候,同样的道理。所以我们最好把协议单独放在一个头文件里。
当然最好还是能不引入头文件就不引入,如果需要引入一些头文件的时候,也可以考虑放到分类(category)中,这样的好处是增加编译的效率和降低类之间的耦合。
今天要点:
除非有必要,否则不引入头文件。这样做可以降低耦合,减少编译时间。
无法前向声明时,尽量把引入头文件的操作放到category中。
- IOS强化知识(2)@class的运用
- IOS强化知识(1)认识Objective-C
- 关于android初学的小知识强化
- Class<T>相比Class的灵活运用
- OpenStack计费项目CloudKitty的强化及运用
- 猫猫学iOS之小知识iOS启动动画_Launch Screen的运用
- AJ学IOS 之小知识iOS启动动画_Launch Screen的运用
- 有序广播的知识运用
- 强化知识,刻苦学习
- 强化学习知识梳理
- IOS runtime的运用
- ios GCD的运用
- IOS 多线程的运用
- iOS枚举的运用
- java Class类的简单运用
- ios FMDB 的运用总结
- iOS KVO的运用理解
- ios之Autolayout的运用
- Android 获取手机SIM资料详解
- Mysql 5.5.40实现一主多从 One-Master muil-slave
- ARM学习记录_ARM2440--J-link烧写设置
- VFS文件系统结构分析
- 单元格选择模式
- IOS强化知识(2)@class的运用
- android ViewPager,ViewFlipper,ViewFlow三种实现图片轮播方案介绍
- c#和 lua 简单交互
- Add Two Numbers
- 解决linux下端口占用
- Machine-Learning Maestro Michael Jordan on the Delusions of Big Data and Other Huge Engineering Effo
- Storm高级属性
- Grid行编辑插件
- WPF TreeView Command