OC-类别/分类
from : http://www.cnblogs.com/wendingding/p/3709569.html
Category,有人译作类别,或分类。其作用是在不改变原来的类内容的基础上,为类增加一些方法。
添加一个分类:
Person+Boy便是所创建的分类。
在分类中添加一个方法
// // Person+Boy.h // WDDGouzaofangfaTest // // Created by LiuChanghong on 15/9/25. // Copyright © 2015年 LiuChanghong. All rights reserved. // #import "Person.h" @interface Person (Boy) -(void)playWithMe; @end
// // Person+Boy.m // WDDGouzaofangfaTest // // Created by LiuChanghong on 15/9/25. // Copyright © 2015年 LiuChanghong. All rights reserved. // #import "Person+Boy.h" @implementation Person (Boy) -(void)playWithMe{ NSLog(@"Play With Me !"); } @end
测试程序
// // main.m // WDDGouzaofangfaTest // // Created by LiuChanghong on 15/9/25. // Copyright © 2015年 LiuChanghong. All rights reserved. // #import <Foundation/Foundation.h> #import "Student.h" #import "Person+Boy.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *person = [Person new]; [person playWithMe]; } return 0; }
输出结果
分类的使用注意
(1)分类只能增加方法(包括类方法和对象方法),不能增加成员变量
(2)在分类方法的实现中可以访问原来类中的成员变量;
(3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(警告);
(4)方法调用的优先级:分类->原来的类->父类,若包含有多个分类,则最后参与编译的分类优先;
(5)在很多的情况下,往往是给系统自带的类添加分类,如NSObject和NSString,因为有的时候,系统类可能并不能满足我们的要求。
(6)在大规模的应用中,通常把相应的功能写成一个分类,可以有无限个分类,对原有类进行扩充,一般分模块写,一个模块一个分类。