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        //複製關聯對象,且爲原子操做變量

相關文章
相關標籤/搜索