需求:對一個現(xiàn)有類里或系統(tǒng)類里添加屬性
一般會先想到分類虐呻,但是分類只支持方法鉴裹,添加屬性會報錯欠气,這是可以使用關聯(lián)對象
關聯(lián)對象是指某個OC對象通過一個唯一的key連接到一個類的實例上率触。屬于runtime范疇
runtime提供給我們的方法:
//關聯(lián)對象
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
//獲取關聯(lián)的對象
id objc_getAssociatedObject(id object, const void *key)
//移除關聯(lián)的對象
void objc_removeAssociatedObjects(id object)
變量說明:
id object:被關聯(lián)的對象
const void *key:關聯(lián)的key抵碟,要求唯一(靜態(tài)全局變量做key豹储,因為這個key是不透明指針贷盲,因此當對比對象想還要求指針相同)
id value:關聯(lián)的對象
objc_AssociationPolicy policy:內(nèi)存管理的策略
1,可以通過“關聯(lián)對象”機制來把兩個對象連起來
2剥扣,定義關聯(lián)對象時可指定內(nèi)存管理語義巩剖,用以模仿定義屬性時所采用的“擁有關系”與“非擁有關系”
3,只有在其他做法不可行時才應選用關聯(lián)對象钠怯,因為這種做法通常會引入難于查找的bug佳魔。