Runtime 關(guān)聯(lián)對象, 可在分類中添加屬性
關(guān)聯(lián) API 如下
- 設(shè)置關(guān)聯(lián)值
/*
object:與誰關(guān)聯(lián),通常是傳self
key:唯一鍵,在獲取值時通過該鍵獲取,通常是使用static const void *來聲明
value:關(guān)聯(lián)所設(shè)置的值
policy:內(nèi)存管理策略,比如使用copy9
*/
void objc_setAssociatedObje
ct(id object, const void *key, id value, objc _AssociationPolicy policy)
// 如:
// objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);
- 獲取關(guān)聯(lián)值
/*
object:與誰關(guān)聯(lián),通常是傳self还惠,在設(shè)置關(guān)聯(lián)時所指定的與哪個對象關(guān)聯(lián)的那個對象
key:唯一鍵,在設(shè)置關(guān)聯(lián)時所指定的鍵
*/
id objc_getAssociatedObject(id object, const void *key)
// 如:
// objc_getAssociatedObject(self,@selector(name))
- 取消關(guān)聯(lián)
void objc_removeAssociatedObjects(id object)
關(guān)聯(lián)策略
typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy){
OBJC_ASSOCIATION_ASSIGN = 0, // 表示弱引用關(guān)聯(lián),通常是基本數(shù)據(jù)類型
OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, // 表示強引用關(guān)聯(lián)對象冲茸,是線程安全的
OBJC_ASSOCIATION_COPY_NONATOMIC = 3, // 表示關(guān)聯(lián)對象copy,是線程安全的
OBJC_ASSOCIATION_RETAIN = 01401, // 表示強引用關(guān)聯(lián)對象缅帘,不是線程安全的
OBJC_ASSOCIATION_COPY = 01403 // 表示關(guān)聯(lián)對象copy轴术,不是線程安全的
};