Objective-c中提供了可以让我们扩展类定义的手段:类目,延展和协议。接下来我就给大家说说类目:为已知的类增加新的方法,可以动态的为已存在的类添加新的行为,不需要访问其源代码,也不需要创建子类,可以向一个类中添加人一多的类别。由于不能添加新实现变量,因此与类声明不同的是,类别的声明中没有实例变量部分。
类目的局限性
1.无法向类中添加新的实例变量。
2.名称冲突,即类别中得方法与现有的方法重名。当发生名称冲突时,类别具有更高的优先级。你得类别方法将完全取代初始方法,从而无法再使用初始方法。有些编程人员在自己的类别方法中增加一个前缀,以确保不发生名称冲突。
有一些技术可以克服类别无法增加新实例变量的局限。例如,可以使用全局字典存储对象与你想要关联的额外变量之间的映射。但此时你可能需要认真考虑一下,类别是否是完成当前任务的最佳选择。
类目的作用
1.将类的实现分散到不同文件或者不同框架中。
2.创建对私有方法的前向引用。
3.向对象添加非正式协议。
类目使用方法
.h文件:
.m文件:
好了,有了上面的MyClass后,我们要在不增加子类,不修改MyClass类的情况下增加一个HelloWorld的方法,怎么添加呢?只需添加两个文件MyClass+HelloWorld.h
.h文件:
.m文件:
上边的categoryEvent方法就是MyClass的类目方法。下面就可以在需要调用的地方使用了,方法如下:
在需要调用的方法里面:
运行结果:
类目简单吧,以上就是类目的简单用法,如果大家有什么更好的用法可以互相交流哈。
类目的使用场景:
1.类包含了很多个方法实现,而这些方法需要不同团队的成员来实现;
2.当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时。
使用类目要注意的问题:
1.不能添加实例变量,若想添加实例变量,可以创建子类来实现;
2.可以重载原始类方法,但是会覆盖掉原始方法;
3.类目的实现文件中的实例方法只要你不去调用它,就可以不用实现所有声明的所有方法。