Runtime运行时三:并联对象

并联对象的理解

关联对象是指某个OC对象通过一个唯一的key连接到一个类的实例上

举个例子:
小明是人类的一个对象,旺财是狗类的一个对象,小明用一条狗链牵着旺财,小明和旺财就是并联起来的,当然小明也可以牵多个狗。

应用场景

给类别添加属性

@interface UIButton (AssociatedObject)
@property (nonatomic, strong) NSDictionary *userInfo;
@end

自己手动生成setter和getter方法

@implementation UIButton (AssociatedObject)
@dynamic userInfo;

方法

首先需要一条链子

static const void *keyID = &keyID;

然后实现settergetter方法

- (void)setUserInfo:(NSDictionary *)userInfo {
    objc_setAssociatedObject(self, keyID, userInfo, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSDictionary *)userInfo {
    return objc_getAssociatedObject(self, keyID);
}

参数说明

id object:被关联的对象(如xiaoming)
const void *key:关联的key,要求唯一
id value:关联的对象(如dog)
objc_AssociationPolicy policy:内存管理的策略

objc_AssociationPolicy policyenum值有:

OBJC_ASSOCIATION_ASSIGN = 0,          
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, 
OBJC_ASSOCIATION_COPY_NONATOMIC = 3,  
OBJC_ASSOCIATION_RETAIN = 01401,       
OBJC_ASSOCIATION_COPY = 01403

当对象被释放时,会根据这个策略来决定是否释放关联的对象,当策略是RETAIN、COPY时,会释放release关联的对象,当是ASSIGN,将不会释放。

你可能感兴趣的:(Runtime运行时三:并联对象)