标签:
OC中的category可以动态的为已经存在的类添加新的方法。这样可以保证类的原始设计规模较小,功能需求新增时再逐步扩展。使用Category对类进行扩展时不需要创建子类。
使用场景
1、在定义类时的某些情况下,可能需要为其中的某个或几个类中添加新的方法
2、类包含了很多个方法实现,而这些方法需要不同团队的成员来实现
3、当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时
类别(category)主要有3个作用:
1、将类的实现分散到多个不同文件或多个不同框架中。
2、创建对私有方法的前向引用。
3、向对象添加非正式协议
关于第二点,实现对基类中私有方法(就是没在.h文件中申明)的访问,在基类中有一个私有方法a();直接访问是不行的,就需要在类别中.h文件中声明一下这个方法,然后就可以调用了。
Category是需要注意的问题:
1、Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类来实现。
2、Category可以重载原始类的方法,不大不推荐这么做,这样会覆盖掉原始类的方法。如果确实要重载,那就通过继承创建子类来实现。
3、和普通接口有所区别的是,在Category的实现文件中的实例方法只要你不去调用它你可以不用实现所有声明的所有方法。
1 Student+Test.h 2 //这里不能用@class Student;因为这里要添加新的方法,需要先知道Student类中原有的方法 3 #import "Student.h" 4 5 // ()代表着是一个分类,类后面跟:是继承 6 // ()中的Test代表着分类的名称 7 @interface Student (Test) 8 // 分类只能扩展方法,不能增加成员变量
标签:
原文地址:http://www.cnblogs.com/mikado-Q/p/4301035.html