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中的方法有效。

  • 相关阅读:
    P2437 蜜蜂路线题解
    P1044 栈题解
    P1002 过河卒题解
    P1433 吃奶酪题解
    组合数公式
    P1036 选数题解
    十进制转二进制方法整理
    golang学习笔记 ---工作区与GOPATH
    golang学习笔记---闭包
    golang学习笔记---类型
  • 原文地址:https://www.cnblogs.com/yoran-yang/p/4290936.html
Copyright © 2011-2022 走看看