- 1、是什么?
runtime:運行時機制- 1.1 runtime是一套比較底層的C語言的API,屬于一個C語言庫,包含了很多底層的C語言API;
- 1.2 平時編寫的OC代碼,程序運行最終都是轉(zhuǎn)成了runtime里面的C語言代碼,說明runtime是OC的幕后工作者,OC代碼的實現(xiàn)都是調(diào)用runtime里面的C語言代碼;
- 1.3 舉例
[[MJPerson alloc] init];
runtime:
objc_msgSend(objc_msgSend(“MJPerson”, “alloc”), “init”);
-
2、用過嗎,怎么用?
runtime屬于OC的底層,可以進行一些非常底層的操作(用OC不好實現(xiàn))- 2.1 在程序運行過程中,動態(tài)創(chuàng)建一個類(比如KVO的底層實現(xiàn),KVC底層也是runtime 機制)
- 2.2 在程序運行過程中,動態(tài)的為某個類添加屬性(成員變量)/方法,修改屬性(成員變量)/方法
- 2.3 遍歷一個類的所有屬性(成員變量)/方法
-
3、相關(guān)的方法和頭文件
- 3.1 頭文件
- 3.1.1 <objc/runtime.h>
- 3.1.2 <objc/message.h>
- 3.2 相關(guān)應(yīng)用
- 3.2.1 NSCoding(歸檔和解檔)
- 3.2.2 字典 ----> 模型(利用runtime遍歷模型對象的所有屬性,根據(jù)屬性名從字典中取出對應(yīng)的值,設(shè)置到模型的屬性上)
- 3.2.3 KVO(利用runtime動態(tài)產(chǎn)生一個類)
- 3.2.4 用于封裝框架(有了運行時,想怎么改,就怎么改)
- 3.3 相關(guān)函數(shù)
- 3.3.1 objc_msgSend:給對象發(fā)送消息
- 3.3.2 class_copyMethodList:遍歷某個類所有的方法
- 3.3.3 class_copyIvarList:遍歷某個類所有的成員變量(屬性)
- 3.3.4 class_...一系列的方法
- 3.4 必備常識
1)Ivar:成員變量
Method:成員方法
- 3.1 頭文件