1.KVO內(nèi)部實(shí)現(xiàn)原理
1>KVO是基于runtime機(jī)制實(shí)現(xiàn)的
2>當(dāng)某個類的對象第一次被觀察時今穿, 系統(tǒng)就會在運(yùn)行期動態(tài)地創(chuàng)建該類的一個派生類,在這個派生類中重寫基類中任何被觀察屬性的setter方法伦籍。
派生類在被重寫的setter方法實(shí)現(xiàn)真正的通知機(jī)制(PersonàNSKVONotifying_Person)
2.是否可以把比較耗時的操作放在NSNotificationCenter中
如果在異步線程發(fā)的通知蓝晒,那么可以執(zhí)行比較耗時的操作;
如果在主線程發(fā)的通知帖鸦,那么就不可以執(zhí)行比較耗時的操作
3.Foundation對象與Core Foundation對象有什么區(qū)別
1> Foundation對象是OC的芝薇,Core Foundation對象是C對象
2>數(shù)據(jù)類型之間的轉(zhuǎn)換
lARC:__bridge_retained、__bridge_transfer
l非ARC:__bridge
4.不用中間變量,用兩種方法交換A和B的值
A = A + B
B = A - B
A = A - B
或者
A= A^B;
B= A^B;
A= A^B;
5.簡單描述下對單利模式設(shè)計的理解作儿?
節(jié)省內(nèi)存資源洛二,一個應(yīng)用就一個對象。
6.什么是動態(tài)攻锰,舉例說明
1>在程序運(yùn)行過程才執(zhí)行的操作
7.runtime實(shí)現(xiàn)的機(jī)制是什么,怎么用晾嘶,一般用于干嘛.你還能記得你所使用的相關(guān)的頭文件或者某些方法的名稱嗎?
運(yùn)行時機(jī)制口注,runtime庫里面包含了跟類变擒、成員變量君珠、方法相關(guān)的API寝志,比如獲取類里面的所有成員變量,為類動態(tài)添加成員變量,動態(tài)改變類的方法實(shí)現(xiàn)材部,為類動態(tài)添加新的方法等需要導(dǎo)入
1>runtime毫缆,運(yùn)行時機(jī)制,它是一套C語言庫
2>實(shí)際上我們編寫的所有OC代碼乐导,最終都是轉(zhuǎn)成了runtime庫的東西苦丁,比如類轉(zhuǎn)成了runtime庫里面的結(jié)構(gòu)體等數(shù)據(jù)類型,方法轉(zhuǎn)成了runtime庫里面的C語言函數(shù)物臂,平時調(diào)方法都是轉(zhuǎn)成了objc_msgSend函數(shù)(所以說OC有個消息發(fā)送機(jī)制)
3>因此旺拉,可以說runtime是OC的底層實(shí)現(xiàn),是OC的幕后執(zhí)行者
4>有了runtime庫棵磷,能做什么事情呢蛾狗?runtime庫里面包含了跟類、成員變量仪媒、方法相關(guān)的API沉桌,比如獲取類里面的所有成員變量,為類動態(tài)添加成員變量算吩,動態(tài)改變類的方法實(shí)現(xiàn)留凭,為類動態(tài)添加新的方法等
5>因此,有了runtime偎巢,想怎么改就怎么改
8.是否使用Core Text或者Core Image等蔼夜?如果使用過,請談?wù)勀闶褂肅ore Text或者Core Image的體驗艘狭。
CoreText
?隨意修改文本的樣式
?圖文混排(純C語言)
?國外:Niumb
Core Image(濾鏡處理)
* 能調(diào)節(jié)圖片的各種屬性(對比度, 色溫, 色差等)
9.NSNotification和KVO的區(qū)別和用法是什么挎扰?什么時候應(yīng)該使用通知,什么時候應(yīng)該使用KVO巢音,它們的實(shí)現(xiàn)上有什么區(qū)別嗎遵倦?如果用protocol和delegate(或者delegate的Array)來實(shí)現(xiàn)類似的功能可能嗎?如果可能官撼,會有什么潛在的問題梧躺?如果不能,為什么傲绣?(雖然protocol和delegate這種東西面試已經(jīng)面爛了…)
通知比較靈活(1個通知能被多個對象接收, 1個對象能接收多個通知),
代理比較規(guī)范掠哥,但是代碼多(默認(rèn)是1對1)
KVO性能不好(底層會動態(tài)產(chǎn)生新的類),只能監(jiān)聽某個對象屬性的改變,不推薦使用(1個對象的屬性能被多個對象監(jiān)聽, ?1個對象能監(jiān)聽多個對象的其他屬性)
更詳細(xì)參考:
http://blog.csdn.net/dqjyong/article/details/7685933
10.Block內(nèi)部的實(shí)現(xiàn)原理
Objective-C是對C語言的擴(kuò)展秃诵,block的實(shí)現(xiàn)是基于指針和函數(shù)指針
11.有兩個數(shù)組a,b续搀,大小都為n,數(shù)組元素的值任意,無序菠净;
要求:通過交換a,b中的元素禁舷,使數(shù)組a元素的和與數(shù)組b元素的和之間的差最小
算法題彪杉,要么靠功底,要么百度