在平時開發(fā)時經(jīng)常會要遇到通過button的綁定值來做邏輯處理以區(qū)分不同的button腺律,通常使用tag來區(qū)分奕短,但是當(dāng)需要傳多個值的時候這就比較麻煩了,通吃染考慮用全局變量來傳值翎碑,今天來介紹另一種給UIButton傳值的方法——關(guān)聯(lián)函數(shù)。下面來簡單介紹下關(guān)聯(lián)之斯。
創(chuàng)建關(guān)聯(lián)要使用到Objective-C的運行時函數(shù):objc_setAssociatedObject來把一個對象與另外一個對象進行關(guān)聯(lián)日杈。該函數(shù)需要四個參數(shù):源對象,關(guān)鍵字佑刷,關(guān)聯(lián)的對象和一個關(guān)聯(lián)策略莉擒。當(dāng)然,此處的關(guān)鍵字和關(guān)聯(lián)策略是需要進一步討論的项乒。
■? 關(guān)鍵字是一個void類型的指針啰劲。每一個關(guān)聯(lián)的關(guān)鍵字必須是唯一的。通常都是會采用靜態(tài)變量來作為關(guān)鍵字檀何。
■? 關(guān)聯(lián)策略表明了相關(guān)的對象是通過賦值蝇裤,保留引用還是復(fù)制的方式進行關(guān)聯(lián)的;還有這種關(guān)聯(lián)是原子的還是非原子的频鉴。這里的關(guān)聯(lián)策略和聲明屬性時的很類似栓辜。這種關(guān)聯(lián)策略是通過使用預(yù)先定義好的常量來表示的。
下面的代碼展示了如何把一個字符串關(guān)聯(lián)到一個數(shù)組上垛孔。
注意使用時導(dǎo)入頭文件objc_setAssociatedObject需要四個參數(shù):源對象藕甩,關(guān)鍵字,關(guān)聯(lián)的對象和一個關(guān)聯(lián)策略周荐。
1狭莱、源對象alert
2僵娃、關(guān)鍵字 唯一靜態(tài)變量key associatedkey
3、關(guān)聯(lián)的對象 sender
4腋妙、關(guān)鍵策略? OBJC_ASSOCIATION_RETAIN_NONATOMIC