runtime學習筆記 摘自----https://blog.csdn.net/coyote1994/article/details/52355026
阿新 • • 發佈:2018-12-05
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可以用來做什麼
- 在程式執行過程中,動態建立一個類(比如KVO的底層實現)
- 在程式執行過程中,動態地為某個類新增屬性/方法。可以用於封裝框架(想怎麼改就怎麼改) 這就是我們runtime機制的主要運用方向
- 遍歷一個類中所有的成員變數(屬性)/所有方法。(比如字典–>模型:利用runtime遍歷模型物件的所有屬性, 根據屬性名從字典中取出對應的值, 設定到模型的屬性上;還有歸檔和接檔,利用runtime遍歷模型物件的所有屬性)
3.runtime相關標頭檔案和函式
<objc/runtime.h>
<objc/message.h>
利用標頭檔案,我們可以檢視到runtime中的各個方法!
相關函式:
objc_msgSend : 給物件傳送訊息
class_copyMethodList : 遍歷某個類所有的方法
class_copyIvarList :
遍歷某個類所有的成員變數 class_.....
必備常識
- Ivar : 成員變數
- Method : 成員方法