參考:http://blog.csdn.net/onlyou930/article/details/9299169
關聯(lián)是指把兩個對象相互關聯(lián)起來貌亭,使得其中的一個對象作為另外一個對象的一部分认臊。
關聯(lián)特性只有在Mac OS X V10.6以及以后的版本上才是可用的。
在類的定義之外為類增加額外的存儲空間
使用關聯(lián)美尸,我們可以不用修改類的定義而為其對象增加存儲空間师坎。這在我們無法訪問到類的源碼的時候或者是考慮到二進制兼容性的時候是非常有用胯陋。
關聯(lián)是基于關鍵字的遏乔,因此盟萨,我們可以為任何對象增加任意多的關聯(lián)了讨,每個都使用不同的關鍵字即可前计。關聯(lián)是可以保證被關聯(lián)的對象在關聯(lián)對象的整個生命周期都是可用的(在垃圾自動回收環(huán)境下也不會導致資源不可回收)男杈。
創(chuàng)建關聯(lián)
創(chuàng)建關聯(lián)要使用到Objective-C的運行時函數(shù):objc_setAssociatedObject來把一個對象與另外一個對象進行關聯(lián)伶棒。該函數(shù)需要四個參數(shù):源對象,關鍵字袖牙,關聯(lián)的對象和一個關聯(lián)策略鞭达。當然畴蹭,此處的關鍵字和關聯(lián)策略是需要進一步討論的叨襟。
■? 關鍵字是一個void類型的指針糊闽。每一個關聯(lián)的關鍵字必須是唯一的右犹。通常都是會采用靜態(tài)變量來作為關鍵字念链。
■? 關聯(lián)策略表明了相關的對象是通過賦值掂墓,保留引用還是復制的方式進行關聯(lián)的;還有這種關聯(lián)是原子的還是非原子的君编。這里的關聯(lián)策略和聲明屬性時的很類似吃嘿。這種關聯(lián)策略是通過使用預先定義好的常量來表示的唠椭。