天天看點

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會先查詢這些消息,然後執行查到的函數分兩步完成)。

     運作時學習路程  

iOS開發之運作時程式設計(Runtime Programming)淺讀

  1、動态的添加對象的成員變量和方法

iOS開發之運作時程式設計(Runtime Programming)淺讀
iOS開發之運作時程式設計(Runtime Programming)淺讀

Ivar : 成員變量 

class_copyIvarList : 周遊某個類所有的成員變量

為類别添加成員變量

iOS開發之運作時程式設計(Runtime Programming)淺讀

為類動态添加方法(//self和_cmd是必須的,在之後可以随意添加其他參數  )

iOS開發之運作時程式設計(Runtime Programming)淺讀

為類交換方法

iOS開發之運作時程式設計(Runtime Programming)淺讀

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