【iOS开发】Runtime关联对象

众所周知,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);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容