objc_setAssociatedObject关联
iOS 中创建关联要要使用到Objective-C的运行时函数:objc_setAssociatedObject,注意添加头文件 #import <objc/runtime.h>
设置关联objc_setAssociatedObject
objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
参数:
- object:源对象
- key:关键字,是一个指针,且关键字是唯一的,通常用静态变量来声明
- value:关联的对象
- policy:关联的策略
关联的策略:
关联的策略像property定义属性,是assign还是copy,是nonatomic还是atomic
OBJC_ASSOCIATION_ASSIGN = 0,
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,
OBJC_ASSOCIATION_RETAIN = 01401,
OBJC_ASSOCIATION_COPY = 01403
获取关联的对象objc_getAssociatedObject
objc_getAssociatedObject(id object, const void *key)
参数:
- object:源对象
- key:关键字
断开关联的对象
断开关联是使用objc_setAssociatedObject函数,将关联的对象传入nil值即可
代码
static char *relateKey;
relateKey = "关键词,么么";
NSArray *array = [NSArray arrayWithObjects:@"哈哈哈",@"啦啦啦",@"嘻嘻嘻", nil];
NSString *associateObj = @"我是被关联的对象,O(∩_∩)O哈哈哈~";
//将array和associateObj关联
objc_setAssociatedObject(array, &relateKey, associateObj, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
NSString *getAssoObj = objc_getAssociatedObject(array, &relateKey);
参考:
http://nshipster.cn/associated-objects/
http://blog.youkuaiyun.com/quanqinyang/article/details/38017581