一、Category
Category的作用
category是Objective-C2.0之后添加的语言特性,category的主要作用是为已经存在的类添加方法。
Category的格式
@interface 类名 (分类类名)
@end
@implementation 主类类名(分类类名)
@end
Category注意事项
category只能给某个已有的类扩充方法,不能添加成员变量,通过@property只会生成setter和getter的声明,不会生成setter和getter的实现以及成员变量(可以通过runtime方式来访问和生成关联对象,从而模拟生成属性)。
Category实现原理
category的优先级比较高,当category中的方法名和类中原有方法同名时,系统会优先调用category中的方法。这是因为category添加的方法在原有类方法之前,系统查找到方法名后停止继续查找。
二、Extension
Extension格式
@interface 类名 ()
@end
Extension注意事项
- extension不但可以声明方法,还可以声明属性,成员变量。
- extension一般用于声明私有方法,私有属性,私有成员变量。
- extension只拥有一个.h文件,不过extension一般不单独存在,而是寄生在类的.m文件中
- extension声明的方法必须实现
三、Category和Extension的区别
1.extension在编译期就实现,category在运行期实现
2.extension可以添加实例变量,category不可以
3.extension需要有类的源码,而category可以给系统的类添加。
参考:完整项目资料下载