運(yùn)行時(shí)(runtime)是指在程序運(yùn)行時(shí)才確定數(shù)據(jù)的類型,調(diào)用指定的方法。將數(shù)據(jù)類型的確定由編譯時(shí)推遲到了程序運(yùn)行時(shí)拍摇。可以通過字符串來創(chuàng)建對象NSClassFromString盏求,創(chuàng)建方法,創(chuàng)建屬性
第一個(gè)問題
runtime實(shí)現(xiàn)的機(jī)制是什么,怎么用亿眠,一般用于干嘛碎罚?
runtime是一套比較底層的純C語言API, 屬于1個(gè)C語言庫, 包含了很多底層的C語言API。
在我們平時(shí)編寫的OC代碼中, 程序運(yùn)行過程時(shí), 其實(shí)最終都是轉(zhuǎn)成了runtime的C語言代碼, runtime算是OC的幕后工作者
比如說缕探,下面一個(gè)創(chuàng)建對象的方法中魂莫,
舉例:
OC :
[[MJPerson alloc] init]
runtime :
objc_msgSend(objc_msgSend(“MJPerson” , “alloc”), “init”)
第二個(gè)問題
runtime 用來干什么呢?爹耗?用在那些地方呢耙考?怎么用呢?
runtime是屬于OC的底層, 可以進(jìn)行一些非常底層的操作(用OC是無法現(xiàn)實(shí)的, 不好實(shí)現(xiàn))
? ? ? ?1)在程序運(yùn)行過程中, 動態(tài)創(chuàng)建一個(gè)類(比如KVO的底層實(shí)現(xiàn))
? ? ? ?2)在程序運(yùn)行過程中, 動態(tài)地為某個(gè)類添加屬性\方法, 修改屬性值\方法
? ? ? ?3)遍歷一個(gè)類的所有成員變量(屬性)\所有方法
例如:我們需要對一個(gè)類的屬性進(jìn)行歸檔解檔的時(shí)候?qū)傩蕴貏e的多潭兽,這時(shí)候倦始,我們就會寫很多對應(yīng)的代碼,但是如果使用了runtime就可以動態(tài)設(shè)置山卦!