Objective-C Associated Objects 初识

Associated Objects 主要有如下三个使用场景:函数

一、为现有的类添加私有变量以帮助实现细节spa

二、为现有的类添加公有属性;code

三、为 KVO 建立一个关联的观察者。对象

 

关联函数一共有3个:ci

void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
//用于给对象添加关联对象,传入 nil 则能够移除已有的关联对象
id objc_getAssociatedObject(id object, const void *key);
//用于获取关联对象
void objc_removeAssociatedObjects(id object);
//用于移除一个对象的全部关联对象
注: objc_removeAssociatedObjects 函数咱们通常是用不上的,由于这个函数会移除一个对象的全部关联对象,将该对象恢复成“原始”状态。这样作就颇有可能把别人添加的关联对象也一并移除,这并非咱们所但愿的。因此通常的作法是经过给 objc_setAssociatedObject 函数传入 nil 来移除某个已有的关联对象
 
 
key值的声明:
*声明 static char kAssociatedObjectKey; 使用&kAssociatedObjectKey
*用 selector ,使用 getter 方法的名称做为 key 值
 

OBJC_ASSOCIATION_ASSIGN = 0,                //弱引用关联对象rem

OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1,   //强引用关联对象,且为非原子操做get

OBJC_ASSOCIATION_COPY_NONATOMIC = 3,    //复制关联对象,且为非原子操做io

OBJC_ASSOCIATION_RETAIN = 01401,          //强引用关联对象,且为原子操做class

OBJC_ASSOCIATION_COPY = 01403        //复制关联对象,且为原子操做变量

相关文章
相关标签/搜索