可以不改變源碼的情況下增加實例變量亭枷。
可與分類配合使用,為分類增加屬性。(類別是不能添加成員變量的(property本質(zhì)也是成員變量 = var + setter闷堡、getter),原因是因為一個類的內(nèi)存大小是固定的疑故,一個類在load方法執(zhí)行前就已經(jīng)加載在內(nèi)存之中杠览,大小已固定)
AssociationsManager
class AssociationsManager {
static OSSpinLock _lock;
static AssociationsHashMap *_map; // associative references: object pointer -> PtrPtrHashMap.
public:
AssociationsManager() { OSSpinLockLock(&_lock); }
~AssociationsManager() { OSSpinLockUnlock(&_lock); }
AssociationsHashMap &associations() {
if (_map == NULL)
_map = new AssociationsHashMap();
return *_map;
}
};
AssociationsManager里面是由一個靜態(tài)AssociationsHashMap來存儲所有的關聯(lián)對象的。這相當于把所有對象的關聯(lián)對象都存在一個全局map里面纵势。而map的的key是這個對象的指針地址(任意兩個不同對象的指針地址一定是不同的)倦零,而這個map的value又是另外一個AssociationsHashMap,里面保存了關聯(lián)對象的kv對吨悍。
銷毀
在obj dealloc時候會調(diào)用object_dispose扫茅,檢查有無關聯(lián)對象,有的話_object_remove_assocations刪除