Runtime機制(一)

關於Runtime具體的簡介請自行百度,我在這裏只是總結下自己看別人學習的內容。
OC與Runtime交互通過三個方面:


  1. 通過OC與源代碼
  2. 通過Foundation框架的NSObject類定義的方法
  3. 通過對Runtime庫的直接調用

·isa表示與class類型的objc_class結構體指針,訪問方法時通過isa找到元類尋找對應方法的函數指針。
·通常方法會被緩存到cache中,下次調用的時候會去cache中查找,如果cache中沒存在,則會去methodList中查找,然後將方法加入緩存中取。
·version對類的序列化有用,有助於分清是那個類。
爲何id可以指向任何類?
id是objc_object結構類型的指針,id要去找類,而類中結構體有isa變量,指向實例對象所屬的類,任何帶有指針並且指向類結構的結構可視爲objc_object。
typedef struct objc_object *id;
類中存儲着實例方法列表,元類中存儲着類方法列表。
@property=ivar+getter+setter
在objc_object中,所有的成員變量,屬性信息是存放在鏈表ivars中,ivars是一個數組,數組中每個元素指向Ivar(變量信息)的指針。
·IMP是函數指針,指向實現方法的首地址,通過取得IMP,就可以跳過Runtime消息傳送機制,直接執行IMP指向函數實現體。


最後附上runtime的使用方法代碼截圖:

這裏寫圖片描述
github鏈接:https://github.com/wulonga/Runtime.git
最後附加上原博文:https://www.jianshu.com/p/9af96a230abe?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=weixin