【iOS开发】Runtime关联对象

作者: Huangbaoqin | 来源:发表于2017-09-26 03:59 被阅读11次

    众所周知,Category 是不能添加成员变量的,倒是可以添加属性,不过不会自动生成 getter 和 setter 方法,也不能生成对应的成员变量。

    • 使用 Runtime 中的关联对象为 Category 添加属性
    #import <Foundation/Foundation.h>
    
    @interface NSArray (name)
    
    @property (nonatomic, copy) NSString *name;
    
    @end
    
    #import "NSArray+name.h"
    #import <objc/runtime.h>
    
    @implementation NSArray (name)
    
    static const char *key = "name";
    
    - (NSString *)name {
        return objc_getAssociatedObject(self, key);
    }
    
    - (void)setName:(NSString *)name {
        objc_setAssociatedObject(self, key, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    
    @end
    
    • 测试
    - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        NSArray *array = @[@1, @2, @3];
        array.name = @"HBQ";
        NSLog(@"array.name = %@", array.name);
    }
    

    相关文章

      网友评论

        本文标题:【iOS开发】Runtime关联对象

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