并联对象的理解
关联对象是指某个OC
对象通过一个唯一的key
连接到一个类的实例上
举个例子:
小明是人类的一个对象,旺财是狗类的一个对象,小明用一条狗链牵着旺财,小明和旺财就是并联起来的,当然小明也可以牵多个狗。
应用场景
给类别添加属性
@interface UIButton (AssociatedObject)
@property (nonatomic, strong) NSDictionary *userInfo;
@end
自己手动生成setter和getter方法
@implementation UIButton (AssociatedObject)
@dynamic userInfo;
方法
首先需要一条链子
static const void *keyID = &keyID;
然后实现setter
和getter
方法
- (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 policy
的enum
值有:
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
,将不会释放。
网友评论