




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Objective-C 2.0 運(yùn)行時(shí)系統(tǒng)編程指概本部分包括如下內(nèi)容Objective-C 運(yùn)行時(shí)。只要有可能,Objective-C Objective-CObjective-C 2.0 運(yùn)行時(shí)系統(tǒng)編程指概本部分包括如下內(nèi)容Objective-C 運(yùn)行時(shí)。只要有可能,Objective-C Objective-C 本文檔的組織結(jié) “類(lèi)型編碼“屬參 Objective-C 2.0 程序設(shè)計(jì)語(yǔ)言介紹了Objective-C語(yǔ)言本身 運(yùn)行時(shí)系統(tǒng)的版 本部分包含如下內(nèi)容早期版本和現(xiàn)行版關(guān)的新特性。早期版本的編程接本部分包含如下內(nèi)容早期版本和現(xiàn)行版關(guān)的新特性。早期版本的編程接口見(jiàn)Objective-C
2、 1 運(yùn)行時(shí)系統(tǒng)參考庫(kù);現(xiàn)行版本的編程接口見(jiàn)Objective-C 2.0 運(yùn)行時(shí)系統(tǒng)參考庫(kù)。此外,現(xiàn)行版本支property的synthesis屬性(參考Objective-C 程序設(shè)計(jì)語(yǔ)言的屬性一節(jié)) 和運(yùn)行時(shí)系統(tǒng)的 本部分包含如下內(nèi)容 通過(guò)Objective-C源代 結(jié)構(gòu)包含類(lèi)定義和協(xié)議類(lèi)定義中的信息,如在Objective-C 2.0 程序設(shè)計(jì)語(yǔ)言中定義類(lèi)和協(xié)議類(lèi)一節(jié)所通過(guò)類(lèi)NSObject的方了NSObject的行為。(NSProxy類(lèi)是個(gè)例外細(xì)節(jié)參考“消息轉(zhuǎn)發(fā)”一節(jié)。)然而,某些情況GDB-object方法就是直接打印出該方法返回的字符串。NSObject實(shí)現(xiàn)并不知道子類(lèi)中的內(nèi)容,
3、所以它只是返回類(lèi)的名字和對(duì)象的地址。NSObjectGDB-object方法就是直接打印出該方法返回的字符串。NSObject實(shí)現(xiàn)并不知道子類(lèi)中的內(nèi)容,所以它只是返回類(lèi)的名字和對(duì)象的地址。NSObject某些NSObject的方法只是簡(jiǎn)單地從運(yùn)行時(shí)系統(tǒng)中獲得信息,從而允許對(duì)象進(jìn)行一定程度的自我檢查。例如,class返回對(duì)象的類(lèi);isKindOfClass:isMemberOfClass:通過(guò)運(yùn)行時(shí)系統(tǒng)的函頭文件在/usr/include/objc中。這些函數(shù)支持用純 C 的函數(shù)來(lái)實(shí)現(xiàn)和 Objective-C 同樣的功能。有一些函了NSObject類(lèi)方法的基礎(chǔ)。這些函數(shù)使 數(shù)是非常有用的。 這
4、些函數(shù)的文檔參見(jiàn)Objective-C 2.0 運(yùn)行時(shí)系統(tǒng)參考庫(kù)消本章描述了代碼的消息表達(dá)式如何轉(zhuǎn)換為對(duì)objc_msgSend函數(shù)的調(diào)用,如何通過(guò)名字來(lái)指定一個(gè)方法,以及如何使用objc_msgSend函數(shù)。本部分包含如下內(nèi)容objcmsgSend函數(shù)獲得方法地利用NSObject類(lèi)中的methodForSelector:下面的例子展示了怎么使用指針來(lái)調(diào)用setFilled:void(*setter)(id,SEL,BOOL); setter = (void (*)(id, SEL, BOOL) 復(fù)發(fā)送很多次時(shí)才有意義,例如上面的for循環(huán)。objc_msgSend在 復(fù)發(fā)送很多次時(shí)才有意義
5、,例如上面的for循環(huán)。objc_msgSend在 類(lèi)的方法表。方法表將方法選標(biāo)和該類(lèi)的方法實(shí)現(xiàn)的地址關(guān)聯(lián)起來(lái)。例如,setOrigin:法選標(biāo)和setOrigin:的方法實(shí)現(xiàn)的地址關(guān)聯(lián),display的方法選標(biāo)和display的該對(duì)象的類(lèi)結(jié)構(gòu)的指針,叫做isa注意:Obective-C Objective-C isa指針。對(duì)象和結(jié)構(gòu)體struct objc_object(objc/objc.h中定義)必須“一致”。然而,您很少需要?jiǎng)?chuàng)建您自己的根對(duì)象,因?yàn)閺腘SObject或者NSProxy繼承的對(duì)象都自動(dòng)包括isa注意:編譯器將自調(diào)用該消息函數(shù)的代碼。您無(wú)須在代碼中顯示調(diào)用該消息函數(shù)objc
6、_msgSend(receiver,selector,arg1,arg2, receiverfor(i=0;i1000,i+3-13-該消息對(duì)應(yīng)的方法選標(biāo)。如果找不到,objc_msgSend3-13-該消息對(duì)應(yīng)的方法選標(biāo)。如果找不到,objc_msgSend將繼續(xù)從父類(lèi)中尋找,直到NSObject旦找到了方法選標(biāo), 使用隱藏的參量一樣)。在方法中可以通過(guò)self消息接收者對(duì)象,通過(guò)選標(biāo)_cmd例子中,_cmd指的是strange方法,self指的收到strange量一樣)。在方法中可以通過(guò)self消息接收者對(duì)象,通過(guò)選標(biāo)_cmd例子中,_cmd指的是strange方法,self指的收到str
7、ange動(dòng)態(tài)方本部分包含如下內(nèi)容動(dòng)態(tài)方 程序設(shè)計(jì)語(yǔ)言中屬性小節(jié))前的修飾符您可以通過(guò)實(shí)現(xiàn)resolveInstanceMethod:resolveClassMethod:來(lái)動(dòng)態(tài)地實(shí)現(xiàn)給定選標(biāo)dynamic-=getTheReceiver(); SEL method = getTheMethod();if (=self|method=_cmd) return nil;returnObjective-C方法可以認(rèn)為是至少有兩個(gè)參數(shù)self和_cmd 的C通常消息轉(zhuǎn)發(fā)(見(jiàn) “消息轉(zhuǎn)發(fā)”)Objective-C方法可以認(rèn)為是至少有兩個(gè)參數(shù)self和_cmd 的C通常消息轉(zhuǎn)發(fā)(見(jiàn) “消息轉(zhuǎn)發(fā)”)動(dòng)態(tài)加
8、模塊 盡管已經(jīng)有一個(gè)運(yùn)行時(shí)系統(tǒng)的函數(shù)來(lái)動(dòng)態(tài)加載Mach-O文件中的Objective-C模ion+if(aSEL=class_addMethod(selfclass,aSEL,(IMP)dynamicMethodIMP,v:); return YES;returnsupervoidself,SEL_cmd)/ion信息請(qǐng)參考Foundation框架中關(guān)于NSBundle類(lèi)的文檔。關(guān)于Mach-O文件的有關(guān)信息請(qǐng)參考MacOS ABI Mach-O 文件格式參考庫(kù)消息轉(zhuǎn) 信息請(qǐng)參考Foundation框架中關(guān)于NSBundle類(lèi)的文檔。關(guān)于Mach-O文件的有關(guān)信息請(qǐng)參考MacOS ABI Ma
9、ch-O 文件格式參考庫(kù)消息轉(zhuǎn) 本部分包含如下內(nèi)容 消息轉(zhuǎn)關(guān)于消息轉(zhuǎn)發(fā)的作用,您可以考慮如下情景:假設(shè),您需要設(shè)計(jì)一個(gè)能夠響應(yīng)negotiatenegotiate方法的實(shí)現(xiàn)中將negotiate消息在不同的繼承體系中響應(yīng)negotiate的將negotiate消息轉(zhuǎn)發(fā)給其他類(lèi)的對(duì)象,就好像從其它類(lèi)那兒“借”來(lái)的現(xiàn)一樣。如下所示:-if(someOtherObjectrespondsTo:selector(negotiate) return someOtherObject negotiate;returnforwardInvocation:相應(yīng)的方法實(shí)現(xiàn)而無(wú)法響應(yīng)某消息時(shí),運(yùn)行時(shí)系統(tǒng)將通過(guò)for
10、wardInvocation:個(gè)對(duì)象都從NObject類(lèi)中繼承了forwrdInvocation:方法。然而,NSObject只是簡(jiǎn)單地調(diào)用了doesNotRecognizeSelector:。通過(guò)實(shí)現(xiàn)您自己的forwardInvocation:forwardInvocation:相應(yīng)的方法實(shí)現(xiàn)而無(wú)法響應(yīng)某消息時(shí),運(yùn)行時(shí)系統(tǒng)將通過(guò)forwardInvocation:個(gè)對(duì)象都從NObject類(lèi)中繼承了forwrdInvocation:方法。然而,NSObject只是簡(jiǎn)單地調(diào)用了doesNotRecognizeSelector:。通過(guò)實(shí)現(xiàn)您自己的forwardInvocation:消息可以通過(guò)息,
11、或者簡(jiǎn)單的“某些消息,因此沒(méi)有響應(yīng)也沒(méi)有錯(cuò)誤。forwardInvocation:方法也可以對(duì)消息轉(zhuǎn)發(fā)的信息,參考Foundation 框架參考庫(kù)中NSInvocation消息轉(zhuǎn)發(fā)和多重繼5-1 注意forwardInvocation:如果您希望您的對(duì)象將negotiate消息轉(zhuǎn)發(fā)給其它對(duì)象,您的對(duì)象不能有negotiate if(someOtherObjectrespondsToSelector: anInvocation selector)anInvocation invokeWithsuper 類(lèi)響應(yīng)了該消息)消對(duì)Objective-C 2.0 程序設(shè)計(jì)語(yǔ)言中 類(lèi)響應(yīng)了該消息)消對(duì)Obj
12、ective-C 2.0 程序設(shè)計(jì)語(yǔ)言中同時(shí)也存在著其它類(lèi)型的消消息轉(zhuǎn)發(fā)和類(lèi)繼盡管消息轉(zhuǎn)發(fā)很“象”繼承,但它不是繼承。例如在NSObject類(lèi)中,方法respondsToSelector:詢(xún)問(wèn)它能否響應(yīng)negotiate 返回值是盡管消息轉(zhuǎn)發(fā)很“象”繼承,但它不是繼承。例如在NSObject類(lèi)中,方法respondsToSelector:詢(xún)問(wèn)它能否響應(yīng)negotiate 返回值是NO,盡管該對(duì)象能夠接收和響應(yīng)negotiate。(見(jiàn)5-1。除了respondsToSelector:isKindOfClass:方法也必須重新實(shí)現(xiàn)。如果您使用的是協(xié)議類(lèi),需要重新實(shí)現(xiàn)的還有conformsToPro
13、tocol:methodSignatureForSelector:-NSMethodSignature*signature=supermethodSignatureForSelector:selector; if (!signature) signature=surrogateif(superrespondsToSelector:aSelector) return YES;else/*Here,testwhethertheaSelectormessagebeforwardedtoanotherobjectandt objectcanrespondtoit.ReturnYESifitcan. r
14、eturnif(aWarriorrespondsToSelector:selector(negotiate)您也可以將消息轉(zhuǎn)發(fā)的部分放在一段私有的代碼里,然后從forwardInvocation:本節(jié)中涉及的方法在Foundation 框架參考庫(kù)中的NSObject:的具體信息,請(qǐng)參考Foundation 框架參考庫(kù)中NSInvocation類(lèi)型編為了和運(yùn)行時(shí)系統(tǒng)協(xié)作,編譯器將方法的返回類(lèi)型和參數(shù)類(lèi)型都編碼成一個(gè)字符串,并且和方法選標(biāo)關(guān)聯(lián)在一起。這些編碼在別的上下文環(huán)境中同樣有用,所以您可以直接使用encode()編譯指令來(lái)得到具體些編碼是您寫(xiě)您也可以將消息轉(zhuǎn)發(fā)的部分放在一段私有的代碼里,然后
15、從forwardInvocation:本節(jié)中涉及的方法在Foundation 框架參考庫(kù)中的NSObject:的具體信息,請(qǐng)參考Foundation 框架參考庫(kù)中NSInvocation類(lèi)型編為了和運(yùn)行時(shí)系統(tǒng)協(xié)作,編譯器將方法的返回類(lèi)型和參數(shù)類(lèi)型都編碼成一個(gè)字符串,并且和方法選標(biāo)關(guān)聯(lián)在一起。這些編碼在別的上下文環(huán)境中同樣有用,所以您可以直接使用encode()編譯指令來(lái)得到具體些編碼是您寫(xiě)的時(shí)候是6-1 Objective-C編含cislqlong Cunsigned ISunsigned char *buf1 = encode(char*buf2=encode(structkey);char
16、*buf3= returntypedefstructtypedefstructidanObject; 重要: Objective-C 不支持long double 類(lèi)型。 encongdouble)和double一樣,返signed Qunsigned long fdBC+bool或者C99 標(biāo)準(zhǔn)的v*字符串(char對(duì)象(無(wú)論是靜態(tài)指定的還是通過(guò)的#類(lèi):方法選標(biāo)arraynumbit?未知類(lèi)型(其它時(shí)候,一般用來(lái)指函數(shù)指針encode()NSObject注意,盡管有一些編碼無(wú)法從 屬時(shí)(參考Objective-C 2.0 程序設(shè)計(jì)encode()NSObject注意,盡管有一些編碼無(wú)法從 屬
17、時(shí)(參考Objective-C 2.0 程序設(shè)計(jì)語(yǔ)言中的屬性小節(jié)),編譯C字符串的數(shù)組返回等。每個(gè)類(lèi)或者協(xié)議類(lèi)了一了的屬性列6-2 Objective-C 編含rnNoORV本部分包含如下內(nèi)容 屬性類(lèi)型和相關(guān)函 本部分包含如下內(nèi)容 屬性類(lèi)型和相關(guān)函 例:您還可以通過(guò)property_getName函數(shù)class_getPropertyprotocol_getProperty:objc_property_tclass_getProperty(Classcls,constcharobjc_property_t protocol_getProperty(Protocol *proto, const
18、char *name, BOOL isRequiredProperty, BOOL isInstanceProperty)constchar*property_getName(objc_property_tidLenderClass=objc_getClass(Lender); erfaceLender:floatpropertyfloatalone; typedefstructobjc_property通過(guò)細(xì)節(jié),參考“類(lèi)型編碼“一節(jié);關(guān)于屬性的類(lèi)型編碼,見(jiàn)“屬性類(lèi)型編碼”及“屬性特征的描述范例”屬性類(lèi)型編通過(guò)細(xì)節(jié),參考“類(lèi)型編碼“一節(jié);關(guān)于屬性的類(lèi)型編碼,見(jiàn)“屬性類(lèi)型編碼”及“屬性特征的描述范例”屬性類(lèi)型編tributes返回的字符串以字母T開(kāi)始,接著是encode如果屬性有readonly 修飾,則字符串中含有R 如果屬性有copy或者retain修飾,則字符串分別含有C 或者&字符串以V
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/JSSL 0008-2023取用水計(jì)量設(shè)施現(xiàn)場(chǎng)校準(zhǔn)技術(shù)規(guī)范
- T/CSWSL 036-2024N-?;呓z氨酸內(nèi)酯酶
- T/CNCA 052-2023礦用開(kāi)槽機(jī)通用技術(shù)條件
- T/CIE 211-2024無(wú)線信道模擬設(shè)備測(cè)試方法
- T/CSES 148-2024水生生物環(huán)境DNA實(shí)驗(yàn)室建設(shè)技術(shù)要求
- 與亞洲有關(guān)的試題及答案
- 拒絕調(diào)崗合同到期解除協(xié)議6篇
- 2025年出口貿(mào)易合同模板6篇
- 小班夏季疾病預(yù)防
- 林地承包合同標(biāo)準(zhǔn)版6篇
- 2025年行政執(zhí)法證考試必考題庫(kù)及答案(共四套)
- 《律師事務(wù)所管理辦法》(全文)
- 校長(zhǎng)國(guó)培計(jì)劃培訓(xùn)成果匯報(bào)
- 湖南出版中南傳媒招聘筆試真題2023
- 2025年河北省職業(yè)院校高職組“食品安全與質(zhì)量檢測(cè)”技能大賽參考試題庫(kù)(含答案)
- 中國(guó)血管性認(rèn)知障礙診治指南(2024版)解讀
- 2024版房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)內(nèi)容解讀
- 浙江省臺(tái)州市2023-2024學(xué)年六年級(jí)上學(xué)期語(yǔ)文期末試卷(含答案)
- 遵紀(jì)守法從我做起主題班會(huì)課件
- DB4102-T 002-2024 黃河鯉池塘養(yǎng)殖技術(shù)規(guī)范
- 45001-2020職業(yè)健康安全管理體系危險(xiǎn)源識(shí)別與風(fēng)險(xiǎn)評(píng)價(jià)及應(yīng)對(duì)措施表(各部門(mén))
評(píng)論
0/150
提交評(píng)論