關(guān)于runtime

一、runtime簡介

RunTime簡稱運(yùn)行時(shí)。OC就是運(yùn)行時(shí)機(jī)制,也就是在運(yùn)行時(shí)候的一些機(jī)制,其中最主要的是消息機(jī)制。

對于C語言,函數(shù)的調(diào)用在編譯的時(shí)候會(huì)決定調(diào)用哪個(gè)函數(shù)。

對于OC的函數(shù),屬于動(dòng)態(tài)調(diào)用過程,在編譯的時(shí)候并不能決定真正調(diào)用哪個(gè)函數(shù),只有在真正運(yùn)行的時(shí)候才會(huì)根據(jù)函數(shù)的名稱找到對應(yīng)的函數(shù)來調(diào)用。

事實(shí)證明:

在編譯階段,OC可以調(diào)用任何函數(shù),即使這個(gè)函數(shù)并未實(shí)現(xiàn),只要聲明過就不會(huì)報(bào)錯(cuò)。

在編譯階段,C語言調(diào)用未實(shí)現(xiàn)的函數(shù)就會(huì)報(bào)錯(cuò)。

二、runtime作用

1.發(fā)送消息

方法調(diào)用的本質(zhì),就是讓對象發(fā)送消息。

objc_msgSend,只有對象才能發(fā)送消息,因此以objc開頭.

使用消息機(jī)制前提,必須導(dǎo)入#import

消息機(jī)制簡單使用

5.字典轉(zhuǎn)模型

設(shè)計(jì)模型:字典轉(zhuǎn)模型的第一步

模型屬性,通常需要跟字典中的key一一對應(yīng)

問題:一個(gè)一個(gè)的生成模型屬性,很慢?

需求:能不能自動(dòng)根據(jù)一個(gè)字典,生成對應(yīng)的屬性。

解決:提供一個(gè)分類,專門根據(jù)字典生成對應(yīng)的屬性字符串。

KVC字典轉(zhuǎn)模型弊端:必須保證,模型中的屬性和字典中的key一一對應(yīng)。

如果不一致,就會(huì)調(diào)用[

setValue:forUndefinedKey:]報(bào)key找不到的錯(cuò)。

分析:模型中的屬性和字典的key不一一對應(yīng),系統(tǒng)就會(huì)調(diào)用setValue:forUndefinedKey:報(bào)錯(cuò)。

解決:重寫對象的setValue:forUndefinedKey:,把系統(tǒng)的方法覆蓋, 就能繼續(xù)使用KVC,字典轉(zhuǎn)模型了。

- (void)setValue:(id)valueforUndefinedKey:(NSString *)key {

}

字典轉(zhuǎn)模型的方式二:Runtime

思路:利用運(yùn)行時(shí),遍歷模型中所有屬性,根據(jù)模型的屬性名,去字典中查找key,取出對應(yīng)的值,給模型的屬性賦值。

步驟:提供一個(gè)NSObject分類,專門字典轉(zhuǎn)模型,以后所有模型都可以通過這個(gè)分類轉(zhuǎn)。



不太會(huì)這個(gè)用排版,大家見諒,只能傻傻的截圖了

我其實(shí)不知道發(fā)什么比較好,如果大家有什么想學(xué)的可以私發(fā)我,我盡量發(fā)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容