W e S D
0 1

[Objective-C] 005_Category(类别)

  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

 

 

posted @ 2015-06-07 22:37  SD.Team  阅读(258)  评论(0编辑  收藏  举报