美文网首页
问题:如何让 Category 支持属性?

问题:如何让 Category 支持属性?

作者: 姜小舟 | 来源:发表于2020-05-11 09:24 被阅读0次

    Category是Objective-C中常用的语法特性,通过它可以很方便的为已有的类来添加函数。但是Category不允许为已有的类添加新的属性或者成员变量。但我们可以通过runtime.h中objc_getAssociatedObject / objc_setAssociatedObject来访问和生成关联对象。通过这种方法来模拟生成属性。代码如下:

    -----------------------------------------------
    //NSObject+test.h
    
    @interface NSObject (test)
    @property (nonatomic, strong) NSString * name;
    @end
    -----------------------------------------------
    //NSObject+test.m
    
    #import "NSObject+test.h"
    #import <objc/runtime.h>//不引用无法使用objc_getAssociatedObject
    
    @implementation NSObject (test)
    
    // 定义关联的key
    static const char *key = "name";
    - (NSString *)name
    {
        // 根据关联的key,获取关联的值。
        return objc_getAssociatedObject(self, key);
    }
    - (void)setName:(NSString *)name
    {
        // 第一个参数:给哪个对象添加关联
        // 第二个参数:关联的key,通过这个key获取
        // 第三个参数:关联的value
        // 第四个参数:关联的策略
        objc_setAssociatedObject(self, key, name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    @end
    -----------------------------------------------
    

    相关文章

      网友评论

          本文标题:问题:如何让 Category 支持属性?

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