Category的实际作用就是为已有的类来添加方法。为现有的类添加的方法可以先不用实现,在需要的时候再实现也是可以的。在我们的实际代码中如何来实现Category的呢?我们上篇的Person 类为例。
///////////////// .h //////////////// #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic,copy)NSString *name; @property (nonatomic,assign)int age; @property (nonatomic,assign)NSString *sex; - (void)printInfo; @end ///////////////// .m //////////////// #import "Person.h" @implementation Person @synthesize name = _name,sex = _sex; @synthesize age = _age; - (void)printInfo { NSLog(@"我的名字叫:%@ 今年%d岁 我是一名%@ %@",self.name,self.age,self.sex,NSStringFromClass([self class])); } @end
现在现有的Person 类中并没有driving的方法,那我们就来为它添加driving,我们新建一个.h和.m文件,名称叫做Person+Driving(类名+方法名),这样命名有一个好处,就是一眼便知道为哪一个类添加了什么方法。
/////////////////// .h ////////////////////// #import <Foundation/Foundation.h> #import "Person.h" @interface Person(Person_Driving) - (void)driving; @end /////////////////// .m ////////////////////// #import "Person+Driving.h" @implementation Person(Person_Driving) - (void)driving { NSLog(@"昨晚特斯拉没充电,今天开的是宝马X6"); } @end
我们现在来看下测AppDelegate中添加测试。
#import "AppDelegate.h" #import "Teacher.h" #import "Student.h" #import "Person.h" #import "Cleaner.h" #import "Person+Driving.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { Person *p = [[Person alloc] init]; p.name = @"隔壁老王"; p.age = 36; p.sex = @"男"; [p printInfo]; [p driving]; return YES; } @end
测试结果:
2015-06-07 22:34:22.247 Attendance[15791:2195987] 我的名字叫:隔壁老王今年36岁我是一名男 Person
2015-06-07 22:34:22.248 Attendance[15791:2195987] 昨晚特斯拉没充电,今天开的是宝马X6
本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 )
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4559609.html