在开发的某些情况下,需要对一些现有的类添加一些新的方法,通常的做法是创建一个子类继承这个类,然后在子类中扩展出的新的方法。但是有时候创建子类并不方便,OC的语言机制中,可以为现有的类添加新的方法,这种技术就叫做类目。 作用:在类目中添加方法及属性和在源类中添加方法和属性是一样的,都能够被类和类的子类调用,这样可以便利维护和开发项目。 NSObject的类目声明称为非正式协议。创建一个NSObject的类目而不实现称为“创建一个非正式协议”;
类目的使用场景: 1、类包含了很多个方法实现,而这些方法需要不同团队成员来实现; 2、当在使用基础类库中的类时,不想继承这些类而指向添加一些方法时。 使用类目的时候需要注意的问题: 1、类目可以访问原始类的实例变量,但不能添加实例变量,如果想添加实例变量,那就通过继承创建子类来实现; 2、类目可以重载原始类的方法,但不推荐这么做,这样会覆盖掉原始类的方法。如果确实要重载,那就通过继承创建子类来实现; 3、和普通接口有所区别的是,在类目的实现文件中的实例方法只要你不去调用它你可以不用实现所有声明的所有方法。
创建类目有两种方法:一种是直接在想要添加方法的类中进行添加,另一种是为目标类创建一个类目文件; 例1(直接添加方法): 1、创建一个Tool类 2、在.h文件中系统默认的@end后面,添加方法 @interface Tool (ToolCategory) -(void)funcation2; @end 3、在.m文件中实现添加的方法 @implementation Tool (ToolCategory) -(void)funcation2 { NSLog(@”I am function2”); } @end 4、在ViewController.m文件中调用添加的方法 - (void)viewDidLoad { [super viewDidLoad]; Tool *tool=[Tool new]; [tool setValue:@”战三” forKey:@”_name”]; [tool funcation1]; [tool funcation2]; 5、可以正常调用添加的方法
例2: 1、创建一个类目类,写一个方法 2、实现该类的方法 3、然后再在ViewController.m文件中调用(结果与第一种方式相同,只需导入头文件即可)
PS:当对NSObject 类添加方法时,其他类或者函数在调用前需要先对函数是否能调用做判断 MyClass *myClass=[MyClass new]; //respondsToSelector:@selector(aselector)判断对象是否能响应aselector方法 if ([myClass respondsToSelector:@selector(test2)]) { [myClass test2];
