Category的用法(类目)

Objective-c中提供了可以让我们扩展类定义的手段:类目,延展和协议。接下来我就给大家说说类目:为已知的类增加新的方法,可以动态的为已存在的类添加新的行为,不需要访问其源代码,也不需要创建子类,可以向一个类中添加人一多的类别。由于不能添加新实现变量,因此与类声明不同的是,类别的声明中没有实例变量部分。

类目的局限性
1.无法向类中添加新的实例变量。

2.名称冲突,即类别中得方法与现有的方法重名。当发生名称冲突时,类别具有更高的优先级。你得类别方法将完全取代初始方法,从而无法再使用初始方法。有些编程人员在自己的类别方法中增加一个前缀,以确保不发生名称冲突。
有一些技术可以克服类别无法增加新实例变量的局限。例如,可以使用全局字典存储对象与你想要关联的额外变量之间的映射。但此时你可能需要认真考虑一下,类别是否是完成当前任务的最佳选择。

类目的作用
1.将类的实现分散到不同文件或者不同框架中。

2.创建对私有方法的前向引用。

3.向对象添加非正式协议。

类目使用方法

.h文件:

.m文件:

好了,有了上面的MyClass后,我们要在不增加子类,不修改MyClass类的情况下增加一个HelloWorld的方法,怎么添加呢?只需添加两个文件MyClass+HelloWorld.h  和 MyClass+HelloWorld.m。

.h文件:

.m文件:

上边的categoryEvent方法就是MyClass的类目方法。下面就可以在需要调用的地方使用了,方法如下:

在需要调用的方法里面:

运行结果:


类目简单吧,以上就是类目的简单用法,如果大家有什么更好的用法可以互相交流哈。


类目的使用场景:

1.类包含了很多个方法实现,而这些方法需要不同团队的成员来实现;

2.当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时。


使用类目要注意的问题:

1.不能添加实例变量,若想添加实例变量,可以创建子类来实现;

2.可以重载原始类方法,但是会覆盖掉原始方法;

3.类目的实现文件中的实例方法只要你不去调用它,就可以不用实现所有声明的所有方法。
 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值