1. 程式人生 > >runtime學習筆記 摘自----https://blog.csdn.net/coyote1994/article/details/52355026

runtime學習筆記 摘自----https://blog.csdn.net/coyote1994/article/details/52355026

1.runtime(執行時機制)是什麼

runtime是屬於OC的底層,是一套比較底層的純C語言API, 可以進行一些非常底層的操作(用OC是無法現實的, 不好實現)。 在我們平時編寫的OC程式碼中, 程式執行過程時, 其實最終都是轉成了runtime的C語言程式碼, runtime算是OC的幕後工作者。

舉例:

//OC : 
[[MJPerson alloc] init] 
//runtime : 
objc_msgSend(objc_msgSend("MJPerson" , "alloc"), "init")

2.runtime可以用來做什麼

  1. 在程式執行過程中,動態建立一個類(比如KVO的底層實現)
  2. 在程式執行過程中,動態地為某個類新增屬性/方法。可以用於封裝框架(想怎麼改就怎麼改) 這就是我們runtime機制的主要運用方向
  3. 遍歷一個類中所有的成員變數(屬性)/所有方法。(比如字典–>模型:利用runtime遍歷模型物件的所有屬性, 根據屬性名從字典中取出對應的值, 設定到模型的屬性上;還有歸檔和接檔,利用runtime遍歷模型物件的所有屬性)

3.runtime相關標頭檔案和函式

<objc/runtime.h>

<objc/message.h>

利用標頭檔案,我們可以檢視到runtime中的各個方法!


相關函式:

objc_msgSend
: 給物件傳送訊息 

class_copyMethodList : 遍歷某個類所有的方法 

class_copyIvarList : 

遍歷某個類所有的成員變數 class_.....

必備常識

  • Ivar : 成員變數 
  • Method : 成員方法