• [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

     

  • 相关阅读:
    django rest framework serializers解读
    django rest framework通用view
    scrapy爬取伯乐在线文章
    scrapy 框架入门
    django rest framework mixins小结
    python 函数进阶
    python 变量进阶(理解)
    Docker 部署Django项目
    Docker部署Vue 工程包
    saltstack 初始化LINUX系统
  • 原文地址:https://www.cnblogs.com/superdo/p/4559609.html
Copyright © 2020-2023  润新知