運行時(runtime)是指在程序運行時才確定數(shù)據(jù)的類型俯艰,調(diào)用指定的方法渤愁。將數(shù)據(jù)類型的確定由編譯時推遲到了程序運行時慕趴。可以通過字符串來創(chuàng)建對象NSClassFromString涮阔,創(chuàng)建方法猜绣,創(chuàng)建屬性
第一個問題
runtime實現(xiàn)的機制是什么,怎么用灰殴,一般用于干嘛敬特?
runtime是一套比較底層的純C語言API, 屬于1個C語言庫, 包含了很多底層的C語言API掰邢。
在我們平時編寫的OC代碼中, 程序運行過程時, 其實最終都是轉(zhuǎn)成了runtime的C語言代碼, runtime算是OC的幕后工作者
比如說,下面一個創(chuàng)建對象的方法中伟阔,
舉例:
OC :
[[MJPerson alloc] init]
runtime :
objc_msgSend(objc_msgSend(“MJPerson” , “alloc”), “init”)
第二個問題
runtime 用來干什么呢辣之??用在那些地方呢皱炉?怎么用呢怀估?
runtime是屬于OC的底層, 可以進行一些非常底層的操作(用OC是無法現(xiàn)實的, 不好實現(xiàn))
1)在程序運行過程中, 動態(tài)創(chuàng)建一個類(比如KVO的底層實現(xiàn))
2)在程序運行過程中, 動態(tài)地為某個類添加屬性\方法, 修改屬性值\方法
3)遍歷一個類的所有成員變量(屬性)\所有方法
例如:我們需要對一個類的屬性進行歸檔解檔的時候?qū)傩蕴貏e的多,這時候合搅,我們就會寫很多對應(yīng)的代碼多搀,但是如果使用了runtime就可以動態(tài)設(shè)置!
作用
能動態(tài)生成灾部、修改康铭、刪除一個類、一個成員變量赌髓、一個方法
常見的函數(shù)从藤、頭文件
import<objc/runtime.h>
Icarus * class_copyIvarList
Method * class_copyMethodList