【譯】runtime編程指南_03和runtime交互

和runtime交互

Objective-C 程序和 runtime 系統有三種不同級別的交互。

  1. 通過 Objective-C 源代碼
  2. 通過 Foundation frameworkNSObject 類定義的方法。
  3. 直接調用 runtime 方法。

Objective-C 源代碼

大多數情況,runtime 默默無聞的在幕后自動工作。你僅僅需要書寫和編譯 Objective-C 代碼即可。

當你編譯包含 Objective-C 類和方法的時候,由于這門語言的動態特性,編譯器將生成數據結構和方法調用。數據結構捕獲了 class 的信息, category 的定義,protocol 的聲明;他們包含了那些在 The Objective-C Programming Language 中定義和聲明的 classprotocol,實例變量,方法選擇器,以及其他從源代碼中提取的信息。最重要的 runtime 方法就是發送消息,它被消息表達式所執行。 詳見 Message

NSObject 方法

Cocoa 中,大多數類繼承與 NSObject ,大多數對象繼承他定義的方法(NSProxy 是一個例外)詳見Message Forwarding。由于這種關系,每個對象和實例都有方法。然而,NSObject 僅僅定義了一些某些應該做的方法模板,它不提供所有必須的代碼。

例如,NSObject 定義了一個 description,這個方法用來返回描述這個類的字符串。在 GDB 調試的時候,打印一個對象的時候輸出的字符串就是從這個方法返回的。NSObject 并不知道這個類包含什么,所以只是返回這個類的名字和地址。NSObject 的子類可以實現這個方法來返回更多的信息。例如 NSArray 這個類返回了它所包含的數據列表。

NSObject 的一些方法用于查詢 runtime 系統的一些信息。這些方法允許對象執行自我檢查。一些方法是類的實例方法,用來詢問對象來確定它的類;isKindOfClass: isMemberOfClass: 用來測試這個對象在繼承鏈中的層級;respondsToSelector: 用來指示這個對象是否可以接收一個特定的消息;conformsToProtocol: 用來指示這個對象是否實現了具體協議的方法;methodForSelector: 用來返回實現該方法的地址。這些方法給了對象來確定自己的能力。

運行時方法

runtime 是一個動態的共享庫, /usr/include/objc 目錄下的頭文件提供了這些方法和數據結構。大多數的方法允許你用純 C 的方式去實現編譯器在處理你的 Objective-C 代碼時所做的工作。其他的基礎方法導出到了 NSObject 類中。這些方法使得開發其他 runtime 接口和工具成為了可能。當用 Objective-C 編碼的時候,并不需要這些。但是當用 Objective-C 編碼的時候,runtime 可能更好用。所有的方法都在 Objective-C Runtime Reference

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容