类别(category)的基本概念
- 为现有的类(自定义的类、第三方的类或者是系统定义的类)添加一些新的行为
- Objective-C的动态运行时分配机制
- 为现有的类添加新的行为,通常也可以采用创建子类的方法, 但是它是有限制的, 如现有的类你没有源代码, 或者现有的类是类簇的形式存在。都无法添加新的行为。
声明和实现类别
- 类别代码习惯放在独立的文件中,通常会以”类名称+类别名称”的风格命名。如:NSString+NumberConvenience,其含义是为现有的类NSString添加一个名为NumberConvenience的类别。
- XCode提供有创建类别的模板。
- 只要保证类别名称唯一,可以向一个类中添加任意数量的类别。
类别的声明
类别的实现
类别的优缺点
优点
- 将类的实现代码分散到多个不同文件或框架中
- 创建对私有方法的前向引用
- 向对象添加非正式协议
缺点
- 无法向类别中添加新的实例变量
- 名称冲突。注意:类别具有最高的优先级
采用类别实现现有类的扩展(class extension)
- 没有的类别
- 可以在源代码类里使用
- 可以添加实例变量,作为类的私有变量
- 可以将只读权限改成可读写的权限
- 创建数量不限
利用类别分散实现代码
- 在大型的项目中,一个类的实现可能非常大,并且.m文件是不可以分离的。但是使用类别可以将一个类的是实现分散且有规律的组织在不同的文件中。还可以将一个类的实现分散到不同的框架中。
- 编程人员可以更加容易阅读代码并实现多人合作编码
- 版本管理降低冲突
通过类别创建前向引用和方法声明
- 告诉编译器此方法已经声明了,可以使用,但是这个类中具体有哪些成员和操作是不知道的。
- 越狱项目中常常使用类别的这个功能,完成调用私有API
- 注意:苹果官方上架AppStore的一个原则是不允许访问类里面的私有变量和方法,如果开发的是非越狱程序的话,一定要注意这条规则。