美文网首页
OC学习之分类添加属性

OC学习之分类添加属性

作者: 龙马君 | 来源:发表于2016-04-04 22:55 被阅读229次

    分类添加的属性要生成get和set方法,不会自动产生私有变量。需要调用runtime里面的方法,进行关联对象。

    • 方法一:定义静态变量,采用静态变量的地址。
    • 方法二:直接使用get函数的地址

    代码如下:

    // Person分类
    @interface Person( PersonSub )
    
    @property (nonatomic, strong) NSString* newName;
    // 新增方法
    -(void)newPrint;
    @end
    
    #import "PersonSub.h"
    #import <objc/runtime.h>
    
    static char kAssociatedNewName;
    
    @implementation Person( PersonSub)
    
    // 分类添加的属性要生成get和set方法,不会产生私有变量。
    // 需要调用runtime里面的方法,进行关联对象。
    // 方法一:定义静态变量,采用静态变量的地址。
    // 方法二:直接使用get函数的地址
    
    // _cmd在Objective-C的方法中表示当前方法的selector,正如同self表示当前方法调用的对象实例一样。
    // 相当于函数指针,设置objc_getAssociatedObject和objc_setAssociatedObject的key都为newName函数的指针。
    -(NSString *)newName{
        return objc_getAssociatedObject(self, _cmd);
        //return objc_getAssociatedObject(self, &kAssociatedNewName);
    }
    
    -(void)setNewName:(NSString *)newName{
        objc_setAssociatedObject(self, @selector(newName), newName, OBJC_ASSOCIATION_RETAIN);
        //objc_setAssociatedObject(self, &kAssociatedNewName, newName, OBJC_ASSOCIATION_RETAIN);
    }
    
    -(void)newPrint{
        NSLog(@"Person newPrint name = %@", name);
    }
    @end
    

    相关文章

      网友评论

          本文标题:OC学习之分类添加属性

          本文链接:https://www.haomeiwen.com/subject/uoqplttx.html