分类(Category)和扩展(Extension)

一、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可以给系统的类添加。

参考:完整项目资料下载

你可能感兴趣的:(分类(Category)和扩展(Extension))