iOS中開(kāi)發(fā)中Associative機(jī)制使用場(chǎng)景

iOS中開(kāi)發(fā)中Associative機(jī)制使用場(chǎng)景

ID:43324769

大?。?6.50 KB

頁(yè)數(shù):5頁(yè)

時(shí)間:2019-09-30

iOS中開(kāi)發(fā)中Associative機(jī)制使用場(chǎng)景_第1頁(yè)
iOS中開(kāi)發(fā)中Associative機(jī)制使用場(chǎng)景_第2頁(yè)
iOS中開(kāi)發(fā)中Associative機(jī)制使用場(chǎng)景_第3頁(yè)
iOS中開(kāi)發(fā)中Associative機(jī)制使用場(chǎng)景_第4頁(yè)
iOS中開(kāi)發(fā)中Associative機(jī)制使用場(chǎng)景_第5頁(yè)
資源描述:

《iOS中開(kāi)發(fā)中Associative機(jī)制使用場(chǎng)景》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、iOS開(kāi)發(fā)中Associative機(jī)制使用場(chǎng)景Associative機(jī)制使用場(chǎng)景這篇文章是來(lái)口藍(lán)鷗鄭州已經(jīng)畢業(yè)的學(xué)員■鄭同學(xué)投的稿件,雖然小編不懂技術(shù),但看過(guò)的人都說(shuō):這篇文章寫的不錯(cuò)。條理清晰,邏輯層層遞進(jìn),適合iOS中級(jí)開(kāi)發(fā)者學(xué)習(xí)!1?概念objective-c有兩個(gè)擴(kuò)展機(jī)制:category和associative。我們可以通過(guò)category來(lái)擴(kuò)展方法,但是它有個(gè)很大的局限性,不能擴(kuò)展屬性。于是,就有了專門用來(lái)擴(kuò)展屬性的機(jī)制:associative。2?使用方法在iOS開(kāi)發(fā)過(guò)程中,category比較常見(jiàn),而associative就用的比較少。ass

2、ociative的主要原理,就是把兩個(gè)對(duì)彖相互關(guān)聯(lián)起來(lái),使得其屮的一個(gè)對(duì)彖作為另外一個(gè)對(duì)彖的一部分。使用associative,我們可以彳、用修改類的定義血為其對(duì)象增加存儲(chǔ)空間。這在我們無(wú)法訪問(wèn)到類的源碼的時(shí)候或者是考慮到二進(jìn)制兼容性的時(shí)候是非常有用。associative是基于關(guān)鍵字的。因此,我們可以為任何對(duì)象增加任意多的associative,每個(gè)都使用不同的關(guān)鍵字即可。associative是可以保證被關(guān)聯(lián)的對(duì)象在關(guān)聯(lián)對(duì)象的整個(gè)生命周期都是可用的。associative機(jī)制提供了三個(gè)方法:?objc_setAssociatedObject(idobje

3、ct,constvoid*keyzidvalue,objc_AssociationPolicypolicy)?objc_getAssociatedObject(idobjectzconstvoiMkey)?objc_removeAssociatedObjects(idobject)2.1創(chuàng)建associative創(chuàng)建associative使用的是:objjsetAssocimtedObject。它把一個(gè)對(duì)彖與另外一個(gè)對(duì)象進(jìn)行關(guān)聯(lián)。該函數(shù)需要四個(gè)參數(shù):源對(duì)象,關(guān)鍵字,關(guān)聯(lián)的對(duì)象、關(guān)聯(lián)策略。關(guān)鍵字是一個(gè)void類型的指針。每一個(gè)關(guān)聯(lián)的關(guān)鍵字必須是唯一的。通常都是

4、會(huì)采用靜態(tài)變量來(lái)作為關(guān)鍵字。關(guān)聯(lián)策略表明了相關(guān)的對(duì)象是通過(guò)賦值,保留引用還是復(fù)制的方式進(jìn)行關(guān)聯(lián)的;還有這種關(guān)聯(lián)是原子的還是非原子的。這里的關(guān)聯(lián)策略和聲明屬性時(shí)的很類似。這種關(guān)聯(lián)策略是通過(guò)使用預(yù)先定義好的常量來(lái)表示的。比如,我們想對(duì)一個(gè)UlView,添加一個(gè)NSString類型的tag??梢赃@么做:-(void)setTagString:(NSString*)value{objc_setAssociatedObject(self,KEY_TAGSTRING,value,OBJC_ASsoC1AT1ON_RETA1N_NONATOM1C);}2.2?獲取asso

5、ciative對(duì)象獲取相關(guān)聯(lián)的是函數(shù)objc_getAssociatedObjecto繼續(xù)上面的例子,從_個(gè)UlView的實(shí)例中,獲取一個(gè)NSString類型的tag-(NSString*)tagstring{NSObject*obj=objc_getAssociatedObject(Self,KEY_TAGSTRING);if(obj&&[objisKindOfclass:[NSStringclass]]){return(NSString*)obj;}returnnil;}2?3?斷開(kāi)associative斷開(kāi)associative是使用objc_setA

6、ssociatedObject函數(shù),傳入nil值即可。objc_setAssociatedObject(Self,KEY_TAGSTRINGZni1zobjc_assoCIATION_RETAIN_NONATOMIC);使用函數(shù)objc_removeAssociatedObjects也口」以斷開(kāi)所冇associative。通常情況下不建議這么做,因?yàn)樗麜?huì)斷開(kāi)所有關(guān)聯(lián)。3.應(yīng)用場(chǎng)景3.1.TagString上面的例子提到,在UlView'P添加NSString類型的標(biāo)記,就是一個(gè)非常實(shí)用的例子。全部的代碼如下:?interfaceUIVicw(BDTag)@p

7、roperty(nonatomic,retain)NSString*tegstring;-(UlVicw*)viewWithTagString:(NSString*)value;@end#importUIView+BDTag.h〃#undefKEY_TAGSTRING#defineKEY_TAGSTRING"UlView.tagString"?implementationUTView(BDTag)@dynamictagstring;-(NSString*)tagString{NSObject*obj=objc_getAssociatedObject(self

8、,KEY_TAGSTRING);if(obj&&[o

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。