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

  • 相关阅读:
    python爬取哦漫画
    NLP系列(2)_用朴素贝叶斯进行文本分类(上)
    svm 笔记
    nlp学习笔记
    LR
    bp网络全解读
    最小二乘法
    学习参考
    pandas中的quantile函数
    泰坦尼克号与小费与乘客数量与 鸢尾花数据集
  • 原文地址:https://www.cnblogs.com/yoran-yang/p/4290936.html
Copyright © 2011-2022 走看看