1. 程式人生 > >iOS開發之執行時程式設計(Runtime Programming)淺讀

iOS開發之執行時程式設計(Runtime Programming)淺讀

  什麼是執行時(Objective-C runtime)?

      簡單的來說,Objective-C runtime是一個實現 Objective-C語言的庫。物件可以用C語言的結構體表示,而方法(methods) 可以用C函式實現。

      事實上,他們也差不多是這麼做的,然後加上一些額外的特性。這些結構體和函式封裝後,Objective-C程式設計師可以在程式執行時建立、檢查、

      修改類,物件和他們的方法。  

      除了封裝,Objective-C runtime庫也負責找出方法的最終執行程式碼。當程式執行 [object doSomething]時,不會直接找到方法並呼叫。相反,一

     條訊息(message)會發送給物件。runtime庫會讓物件根據訊息決定該做出什麼樣的反應。所以,訊息傳遞(message - passing)是Smalltalk(

      Objective-C 根據Smalltalk發展而來)最重要的部分,而不是物件。“訊息命令(messaging)” ,是Smalltallk的核心內容。製造一個龐大且可擴充套件系統的關

      鍵是設計它各個模組之間的通訊方式,而不是關注它的內部屬性和行為。

     很多文章中使用Object runtime這個詞,看似只有一個,實際上存在很多的runtime庫。雖然它們都支援物件的自省檢查和訊息接受,但是它們卻有不同的

     特性和實現方式(同樣是傳送訊息,Apple的runtime用一步完成,而GNU runtime會先查詢這些訊息,然後執行查到的函式分兩步完成)。

     執行時學習路程  

    

  1、動態的新增物件的成員變數和方法

      

Ivar : 成員變數 

class_copyIvarList : 遍歷某個類所有的成員變數

為類別新增成員變數


為類動態新增方法(//self和_cmd是必須的,在之後可以隨意新增其他引數


為類交換方法


      Objective-C runtime可以有效的幫助我們為程式增加很多動態的行為。一些開發者除了使用method swizzling幫助除錯程式,並不會在實際程式中使用它,但runtime程式設計的確有很多功能,它應該成為實際應用程式碼編寫的重要工具。