类别category

类别主要有三个用途:
1.对类进行扩展,也可以将类的实现代码分散到多个不同的文件或框架中。可以把类代码分成很多易于管理的小块,以便单独检视。
如:可以在一个类的声明之后,接着声明类别,该类别中再声明有要实现的方法。然后将类别名作为独立的类,从而分散到几个不同的实现文件中;

2.创建对私有方法的前向引用,否则当调用一个类的私有方法时会报错;

3.向对象添加非正式协议。
创建一个NSObject的类别称为“创建一个非正式协议”。因为,NSObject是顶级父类,在NSObject中添加了该方法,也就是说通过继承关系,所有的类中都有该方法。
正式协议是通过protocol指定的一些列方法的声明,然后由实现该协议的类自己去实现这些方法。而非正式协议是通过向NSObject中添加一个类别来实现,然后子类去继承NSObject。

@interface <#class name#> (<#category name#>)

@end

类别的缺陷
1.无法向类中添加新的实例变量,因为类别没有空间容纳实例变量;应将其理解为扩展类功能的一种手段,而非封装数据。

2.名称冲突。当类别中方法与现有方法发生名称冲突时,类别有更高优先级将取代初始方法,所以最好类别方法名中添加类前缀。


@interface <#class name#> ()

@end

“类扩展”——特殊的类别
1.不需要命名
2.可以在自己的类中使用
3.可以添加实例变量
4.可以更改自己类.h文件中声明属性的性质,如readonly改成readwrite

因为有ABI(Application Binary Interface),该机制定义了许多内容,其中一项就是生成代码时所应遵循的规范,可以在运行期向类中新增实例变量。因此可以在类扩展中定义方法和实例变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值