zoukankan      html  css  js  c++  java
  • objective-c中的category

    如果有如下一个类

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    @property int age;
    @end
    
    @implementation Person
    
    @end

    category可以在不修改Person类的代码,不用子类继承的方式扩展其方法

    (实际等同于将一个类拆分在不同的文件中)

    建立如下的category文件

    #import "Person.m"
    
    @interface Person (yangys)
    - (void)study;
    @end
    
    @implementation Person (yangys)
    - (void)study
    {
        NSLog(@"%d",self.age);
    }
    @end

    此文件的文件名为Person+yangys.m

    则相当于Person类拥有了-(void)study方法

    在main函数中调用如下:

    #import <Foundation/Foundation.h>
    #import "Person.m"
    #import "Person+yangys.m"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            Person *p = [Person new];
            p.age = 10;
            [p study];
        }
        return 0;
    }

    结果:

    2015-02-14 19:10:28.284 CategoryDemo[823:35958] 10
    Program ended with exit code: 0

    注意:

    1.category方法实现中可以访问原类中声明的成员变量;

    2.category可以重新实现原类中的方法,但是会覆盖掉原类的方法,会导致原类的方法无法再使用;

    3.调用优先级:category-> 原类-> 父类

    4.如果多个category中拥有同样的方法,则最后编译的category中的方法有效。

  • 相关阅读:
    UML设计
    Scrum冲刺阶段1
    Alpha项目冲刺
    系统设计
    需求分析
    团队选题与审计
    奶酪好吃吗
    功能规格说明书
    出出出出出题器测试
    出题器2.0
  • 原文地址:https://www.cnblogs.com/yoran-yang/p/4290936.html
Copyright © 2011-2022 走看看