1. runtime實(shí)現(xiàn)機(jī)制是什么仪搔,怎么用,一般用于干嘛恬惯?你還能記得使用的相關(guān)頭文件或者某些方法的名稱嗎向拆?
- 運(yùn)行時(shí)機(jī)制,它是一套C語言庫(kù)
- runtime庫(kù)里面包含了跟類酪耳、成員變量浓恳、方法相關(guān)的API,比如獲取類里面的所有成員變量,動(dòng)態(tài)改變類的方法實(shí)現(xiàn)碗暗,為類動(dòng)態(tài)添加新的方法等
- 需要導(dǎo)入<objc/message.h><objc/runtime.h>
- 實(shí)際上我們編寫的所有OC代碼颈将,最終都是轉(zhuǎn)成了runtime庫(kù)的東西,比如類轉(zhuǎn)成了結(jié)構(gòu)體等數(shù)據(jù)類型言疗,方法轉(zhuǎn)成了C語言函數(shù)晴圾,平時(shí)調(diào)用的方法轉(zhuǎn)成了
objc msgSend
函數(shù)(所以O(shè)C有個(gè)消息發(fā)送機(jī)制),因此可以說runtime是OC的底層實(shí)現(xiàn)和幕后執(zhí)行者
2. KVO內(nèi)部實(shí)現(xiàn)原理
- KVO是基于runtime機(jī)制實(shí)現(xiàn)的
- 當(dāng)某個(gè)類的對(duì)象第一次被觀察時(shí)噪奄,系統(tǒng)就會(huì)在運(yùn)行期間死姚,動(dòng)態(tài)的創(chuàng)建一個(gè)該類的派生類,在這個(gè)派生類中重寫基類中被觀察屬性的setter方法來實(shí)現(xiàn)真正的通知機(jī)制(Dog->NSKVONotifyingDog)
3. NSNotification和KVO的區(qū)別和用法是什么勤篮?怎么合理使用都毒?在實(shí)現(xiàn)上有什么區(qū)別?如果用protocol和delegate來實(shí)現(xiàn)可能嗎碰缔?會(huì)有什么潛在問題账劲,為什么?
- 通知比較靈活(1個(gè)通知能被多個(gè)對(duì)象接收金抡,1個(gè)對(duì)象能接收多個(gè)通知)
- 代理比較規(guī)范瀑焦,但是代碼多(默認(rèn)是1對(duì)1)
- KVO性能不好(地城對(duì)動(dòng)態(tài)的產(chǎn)生新類),只能監(jiān)聽某個(gè)對(duì)象屬性的改變竟终,不推薦使用(1個(gè)對(duì)象能被多個(gè)對(duì)象監(jiān)聽蝠猬,1個(gè)對(duì)象能監(jiān)聽對(duì)個(gè)對(duì)象的其他屬性)
更詳細(xì)參考:http://blog.csdn.net/dqjyong/article/details/7685933
4. Block內(nèi)部實(shí)現(xiàn)原理
Objective-C是對(duì)C語言的擴(kuò)展,block的實(shí)現(xiàn)是基于指針和函數(shù)指針