【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