iOS相關(guān)面試題總結(jié)<一>

1、UIView和CALayer的區(qū)別

UIView: 為其提供內(nèi)容晦嵌,以及負(fù)責(zé)處理觸摸等事件參與響應(yīng)鏈
CALayar: 負(fù)責(zé)顯示內(nèi)容contents
單一職責(zé)原則(設(shè)計(jì)原則)

2、事件傳遞機(jī)制和視圖響應(yīng)鏈
點(diǎn)擊圖中白色圓形區(qū)域

事件傳遞主要跟兩個(gè)方法有關(guān)系:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 励堡。點(diǎn)擊圓形區(qū)域艇炎,傳遞過(guò)程可參照下面的流程圖耸成。

事件傳遞過(guò)程

這里遍歷時(shí)采用的是倒序遍歷叛拷,若點(diǎn)擊的位置在兩個(gè)視圖的交集舌厨,那么誰(shuí)后添加誰(shuí)接收事件。(即最上面的視圖為最終接收者)忿薇。

響應(yīng)鏈:當(dāng)視圖接收事件后判斷該視圖是否響應(yīng)事件裙椭,若沒(méi)有響應(yīng)該事件則會(huì)逐級(jí)尋找下一個(gè)響應(yīng)者直到UIApplicationDelagate。如果一直沒(méi)有響應(yīng)該事件署浩,則忽略該事件揉燃。

3、滑動(dòng)視圖優(yōu)化方案以及離屏渲染

首先解釋一下出現(xiàn)卡頓筋栋、掉幀的原因:UI繪制過(guò)程中是CPU/GPU共同協(xié)作的結(jié)果你雌,一般60幀/s為穩(wěn)定狀態(tài)。即需要時(shí)16.7ms內(nèi)實(shí)現(xiàn)一個(gè)Vsync信號(hào)的顯示二汛,若超過(guò)這個(gè)時(shí)間則可理解為掉幀。一般保證30幀以上即卡頓不是很明顯拨拓。

離屏渲染:

  1. 是GPU在當(dāng)前屏幕的緩沖區(qū)外新開(kāi)一個(gè)緩沖區(qū)進(jìn)行渲染操作肴颊。
  2. 視圖在設(shè)置某些屬性時(shí)會(huì)被標(biāo)記在未預(yù)合成之前不能在屏幕上顯示。

觸發(fā)離屏渲染:

  • 設(shè)置圓角(必須與maskToBounds一起使用)
  • 圖層蒙版
  • 設(shè)置陰影
  • 光柵化

離屏渲染的影響

  • 增加GPU的工作量使CPU/GPU的時(shí)間增加出現(xiàn)掉幀渣磷、卡頓
  • 創(chuàng)建新的渲染緩沖區(qū)婿着,上下文切換增加額外開(kāi)銷(xiāo)。
4、關(guān)于OC對(duì)象相關(guān)問(wèn)題
① 分類(lèi)的作用
  • 聲明私有方法
  • 分解體積龐大的類(lèi)文件
  • 把Framework的私有方法分開(kāi)
② 分類(lèi)的特點(diǎn)
  • 運(yùn)行時(shí)決議(通過(guò)runtime將分類(lèi)信息添加到類(lèi)中)
  • 可以為系統(tǒng)類(lèi)添加分類(lèi)(獲取坐標(biāo))
③ 分類(lèi)可添加的內(nèi)容
  • 實(shí)例方法竟宋、類(lèi)方法
  • 協(xié)議
  • 屬性(只會(huì)聲明提完,不會(huì)實(shí)現(xiàn)get、set方法丘侠。)

總結(jié):分類(lèi)是通過(guò)運(yùn)行時(shí)編譯徒欣,將方法、協(xié)議蜗字、屬性添加到類(lèi)的原數(shù)據(jù)之前打肝。如果多個(gè)分類(lèi)實(shí)現(xiàn)同一個(gè)方法,那么誰(shuí)后編譯誰(shuí)先執(zhí)行挪捕。分類(lèi)方法會(huì)存在類(lèi)方法列表前面的位置粗梭,也就是所謂的“覆蓋”。名字相同的分類(lèi)會(huì)引起編譯報(bào)錯(cuò)级零。

④ 關(guān)聯(lián)對(duì)象的使用

為分類(lèi)添加成員變量断医。

所有對(duì)象的關(guān)聯(lián)內(nèi)容全部都存到一個(gè)全局AssociationsHashMap中。內(nèi)部關(guān)系可以參照下方字典的key-value映射關(guān)系奏纪。

{
    "0x34245":{
        “@selector(key)”:{
              "value":"hello",
              "policy":"retain"
          }
    }
}
⑤ 擴(kuò)展
  • 聲明私有屬性(防止子類(lèi)調(diào)用)
  • 聲明私有方法
  • 聲明私有成員變量
  • 編譯時(shí)決議鉴嗤。
  • 只以聲明的形式存在,多數(shù)情況下寄生于宿主類(lèi)的.m中亥贸。
  • 不能為系統(tǒng)類(lèi)添加擴(kuò)展
⑥ 代理Delegate
  • 一種軟件設(shè)計(jì)模式躬窜。
  • @protocol形式實(shí)現(xiàn)。
  • 一對(duì)一
⑦ 通知NSNotification
  • 是使用觀察者模式來(lái)實(shí)現(xiàn)的用于跨層傳遞消息的機(jī)制
  • 一對(duì)多
  • 內(nèi)部實(shí)現(xiàn):作為一個(gè)字典炕置,key為通知名稱(chēng)荣挨,value為observer的集合。
⑥ KVO使用原理
  • KVO是觀察者設(shè)計(jì)模式的一種實(shí)現(xiàn)
  • 使用了isa混寫(xiě)(isa-swizzling)來(lái)實(shí)現(xiàn)KVO

當(dāng)對(duì)A類(lèi)添加觀察者時(shí)朴摊,運(yùn)行時(shí)出產(chǎn)生一個(gè)A類(lèi)的子類(lèi)NSKVONotifying_A對(duì)setter方法重寫(xiě)默垄,來(lái)達(dá)到通知所有觀察者的目的。

-(void) willChangeValueForKey:(NSString *)key
// 原來(lái)的setter方法
[super setValue:]
-(void) didChangeValueForKey:(NSString *)key
  • 使用setter方法改變值KVO才會(huì)生效
  • 使用KVC也會(huì)觸發(fā)KVO
  • 修改成員變量不會(huì)觸發(fā)KVO甚纲】诙В可以進(jìn)行手動(dòng)觸發(fā)(重寫(xiě)子類(lèi)的兩個(gè)方法)
⑦ KVC使用原理

鍵值編碼技術(shù)。
setValue:forKey: 查看setKey _setKey 是否存在介杆,如果不存在判斷-(BOOL)accessInstanceVariablesDirectly鹃操,返回真則找成員變量 _key,_isKey, key, isKey進(jìn)行賦值,如果不存在則會(huì)報(bào)錯(cuò)
valueForKey:查看getKey, Key, isKey, _key 是否存在春哨,如果不存在判斷-(BOOL)accessInstanceVariablesDirectly荆隘,返回真則找成員變量 _key,_isKey, key, isKey進(jìn)行取值,如果不存在則會(huì)報(bào)錯(cuò)

⑧ 屬性關(guān)鍵字
  • 讀寫(xiě)權(quán)限 readwrite 默認(rèn) readonly
  • 原子性 atomic 默認(rèn) nonatomic

區(qū)別:atomic是線程安全的赴背。加入修飾一個(gè)數(shù)組椰拒,那么數(shù)組的獲取和賦值能保證線程安全晶渠,但是對(duì)數(shù)組的操作不能保證是線程安全的。

  • 引用計(jì)數(shù) retain/strong assign weak copy
    assign:
    • 修飾基本數(shù)據(jù)類(lèi)型
    • 修飾對(duì)象類(lèi)型燃观,不會(huì)改變其引用計(jì)數(shù)
    • 會(huì)產(chǎn)生懸垂指針褒脯。(修飾的對(duì)象被釋放,但是指針依然指向原來(lái)的地址)
      weak:
    • 不改變被修飾對(duì)象的引用計(jì)數(shù)
    • 所指對(duì)象在被釋放之后會(huì)自動(dòng)置為nil

淺拷貝和深拷貝:淺拷貝對(duì)地址的復(fù)制缆毁,指向同一塊內(nèi)存地址番川。深拷貝會(huì)產(chǎn)生一個(gè)新的內(nèi)存地址。
淺拷貝會(huì)增加對(duì)象的引用計(jì)數(shù)积锅。

對(duì)可變對(duì)象和不可變對(duì)象進(jìn)行copymutableCopy:

  • 可變對(duì)象的copymutableCopy都是深拷貝爽彤。
  • 不可變對(duì)象的copy是淺拷貝,mutableCopy是深拷貝缚陷。
  • copy方法返回的對(duì)象都是不可變對(duì)象适篙。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市箫爷,隨后出現(xiàn)的幾起案子嚷节,更是在濱河造成了極大的恐慌,老刑警劉巖虎锚,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硫痰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡窜护,警方通過(guò)查閱死者的電腦和手機(jī)效斑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柱徙,“玉大人缓屠,你說(shuō)我怎么就攤上這事』の辏” “怎么了敌完?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)羊初。 經(jīng)常有香客問(wèn)我滨溉,道長(zhǎng),這世上最難降的妖魔是什么长赞? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任晦攒,我火速辦了婚禮,結(jié)果婚禮上得哆,老公的妹妹穿的比我還像新娘勤家。我一直安慰自己,他們只是感情好柳恐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布伐脖。 她就那樣靜靜地躺著,像睡著了一般乐设。 火紅的嫁衣襯著肌膚如雪讼庇。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天近尚,我揣著相機(jī)與錄音蠕啄,去河邊找鬼。 笑死戈锻,一個(gè)胖子當(dāng)著我的面吹牛歼跟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播格遭,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼哈街,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拒迅?” 一聲冷哼從身側(cè)響起骚秦,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎璧微,沒(méi)想到半個(gè)月后作箍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡前硫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年胞得,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屹电。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阶剑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗤详,到底是詐尸還是另有隱情个扰,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布葱色,位于F島的核電站递宅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏苍狰。R本人自食惡果不足惜办龄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淋昭。 院中可真熱鬧俐填,春花似錦、人聲如沸翔忽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至驶悟,卻和暖如春胡野,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痕鳍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工硫豆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笼呆。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓熊响,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親诗赌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子汗茄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 面向?qū)ο蟮娜筇匦裕悍庋b、繼承境肾、多態(tài) OC內(nèi)存管理 _strong 引用計(jì)數(shù)器來(lái)控制對(duì)象的生命周期剔难。 _weak...
    運(yùn)氣不夠技術(shù)湊閱讀 1,099評(píng)論 0 10
  • 面試題參考1 : 面試題[http://www.cocoachina.com/ios/20150803/12872...
    江河_ios閱讀 1,737評(píng)論 0 4
  • 高中生伍佳琪,一個(gè)安安靜靜的讀書(shū)人奥喻,突然有一天一個(gè)叫楊海的轉(zhuǎn)校生偶宫,從此以后兩人會(huì)開(kāi)啟怎樣的場(chǎng)面呢……
    愛(ài)情制片閱讀 155評(píng)論 0 0
  • 在這個(gè)世界上沒(méi)有任何人有資格或者有必要去為另外一個(gè)人的人生負(fù)責(zé)任除了他自己本身例外
    馬漢馳閱讀 143評(píng)論 0 0