[OC Runtime編程指南_翻譯]一钧椰、介紹
[OC Runtime編程指南_翻譯]二粹断、運行時版本和平臺
[OC Runtime編程指南_翻譯]三、與運行時交互
[OC Runtime編程指南_翻譯]四嫡霞、消息傳遞
[OC Runtime編程指南_翻譯]五瓶埋、動態(tài)方法解析
[OC Runtime編程指南_翻譯]六、消息轉(zhuǎn)發(fā)
[OC Runtime編程指南_翻譯]七诊沪、類型編碼
[OC Runtime編程指南_翻譯]八养筒、聲明屬性注:pdf翻譯文檔百度云下載鏈接,密碼:zcs2
Objective-C程序在三個不同的層次與運行時系統(tǒng)交互:通過Objective-C源碼
端姚;通過在基礎(chǔ)框架的NSObject類中定義的方法
晕粪;通過直接調(diào)用運行時函數(shù)
。
Objective-C 源碼
在大多數(shù)情況下渐裸,運行時系統(tǒng)在后臺自動工作
巫湘。您只需編寫和編譯Objective-C源代碼就可以使用它装悲。
當您編譯包含Objective-C類和方法的代碼時,編譯器將創(chuàng)建實現(xiàn)語言動態(tài)特性的數(shù)據(jù)結(jié)構(gòu)和函數(shù)調(diào)用尚氛。數(shù)據(jù)結(jié)構(gòu)捕獲類和類別定義以及協(xié)議聲明中的信息诀诊;它們包括在用 _Objective-C _編程語言 定義類和 協(xié)議時討論的類和協(xié)議對象,以及方法選擇器阅嘶、實例變量模板和從源代碼中提取的其他信息属瓣。主運行時函數(shù)是發(fā)送消息的函數(shù),如 消息傳遞中所述讯柔。它由源代碼消息表達式調(diào)用抡蛙。
NSObject 方法
Cocoa
中的大多數(shù)對象都是NSObject
類的子類,因此大多數(shù)對象都繼承它定義的方法
魂迄。(一個值得注意的例外是NSProxy
類溜畅;有關(guān)更多信息,請參閱 消息轉(zhuǎn)發(fā)极祸。)因此慈格,它的方法建立了每個實例和每個類對象固有的行為。然而遥金,在一些情況下浴捆,NSObject
類只定義了一個模板,用于說明應(yīng)該如何完成某件事稿械;它本身并沒有提供所有必需的代碼选泻。
例如,NSObject
類定義了一個description
實例方法美莫,該方法返回一個描述類內(nèi)容的字符串页眯。這主要用于調(diào)試-GDB print object
命令打印從該方法返回的字符串。這個方法的NSObject
實現(xiàn)不知道類包含什么厢呵,所以它返回一個帶有對象名稱和地址的字符串窝撵。NSObject
的子類可以實現(xiàn)此方法以返回更多詳細信息。例如襟铭,基礎(chǔ)類NSArray返回它包含的對象的描述列表碌奉。
有些NSObject
方法只是查詢運行時系統(tǒng)的信息。這些方法允許對象執(zhí)行自省寒砖。此類方法的示例有類方法赐劣,它要求對象標識其類;isKindOfClass:和isMemberOfClass:
哩都,用于測試對象在繼承層次結(jié)構(gòu)中的位置魁兼;respondsToSelector:
,指示對象是否可以接受特定消息漠嵌;conformsToProtocol:
咐汞,它指示對象是否聲明實現(xiàn)特定協(xié)議中定義的方法判哥;methodForSelector:
,它提供方法實現(xiàn)的地址碉考。像這樣的方法給對象提供了自我反省的能力。
運行時函數(shù)
運行時系統(tǒng)
是一個動態(tài)共享庫
挺身,其公共接口
由位于目錄/usr/include/objc
中的頭文件中的一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)組成侯谁。這些函數(shù)中的許多都允許您使用純C來復(fù)制編寫Objective-C代碼時編譯器所做的工作。其他的則是通過NSObject類的方法導(dǎo)出的功能的基礎(chǔ)章钾。這些函數(shù)使得開發(fā)運行時系統(tǒng)的其他接口和生成擴展開發(fā)環(huán)境的工具成為可能墙贱;在Objective-C中編程時不需要它們。但是贱傀,在編寫Objective-C程序時惨撇,一些運行時函數(shù)可能會有用。所有這些函數(shù)都記錄在_Objective-C _運行時參考中府寒。