那什么是OC runtime
?簡(jiǎn)單來(lái)說(shuō),Objective-C runtime是一個(gè)實(shí)現(xiàn)Objective-C語(yǔ)言的C庫(kù)。對(duì)象可以用C語(yǔ)言中的結(jié)構(gòu)體表示,而方法(methods)可以用C函數(shù)實(shí)現(xiàn)。事實(shí)上,他們差不多也是這么干了,另外再加上了一些額外的特性。這些結(jié)構(gòu)體和函數(shù)被runtime函數(shù)封裝后,我們就可以在程序運(yùn)行時(shí)創(chuàng)建,檢查,修改類,對(duì)象和它們的方法。
runtime常用方法
```
//返回一個(gè)指向類的成員變量數(shù)組的指針
class_copyIvarList()
//返回一個(gè)指向類的屬性數(shù)組的指針
class_copyPropertyList()
注意:根據(jù)Apple官方runtime.h文檔所示,上面兩個(gè)方法返回的指針,在使用完畢之后必須free()。
---------------------------------------------------
//獲取成員變量名-->C類型的字符串
?ivar_getName()
?//獲取屬性名-->C類型的字符串
?property_getName()
?---------------------------------------------------
?typedef struct objc_method *Method;
?class_getInstanceMethod()
? //以上兩個(gè)函數(shù)傳入返回Method類型
? class_getClassMethod()
? ---------------------------------------------------
? //交換兩個(gè)方法的實(shí)現(xiàn)
? method_exchangeImplementations()
```
runtime用法
1.動(dòng)態(tài)的遍歷一個(gè)類的所有成員變量,屬性,方法,協(xié)議等

2、可以利用遍歷類的屬性,來(lái)快速的進(jìn)行歸檔操作

3、將從網(wǎng)絡(luò)上下載的json數(shù)據(jù)進(jìn)行字典轉(zhuǎn)模型


3、動(dòng)態(tài)添加 交換方法

4、攔截調(diào)用動(dòng)態(tài)添加

5、動(dòng)態(tài)變量控制

6、拓展屬性

7、實(shí)現(xiàn)KVO
