Runloop & KVO
runloop
- app如何接收到觸摸事件的
- 為什么只有主線程的
runloop是開啟的 - 為什么只在主線程刷新UI
-
PerformSelector和runloop的關(guān)系 - 如何使線程?;?/li>
KVO
- 實現(xiàn)原理
- 如何手動關(guān)閉kvo
- 通過KVC修改屬性會觸發(fā)KVO么
- 哪些情況下使用kvo會崩潰,怎么防護崩潰
- kvo的優(yōu)缺點
runtime相關(guān)問題
結(jié)構(gòu)模型
- 介紹下runtime的內(nèi)存模型(isa、對象、類、metaclass、結(jié)構(gòu)體的存儲信息等)
- 為什么要設(shè)計metaclass
-
class_copyIvarList&class_copyPropertyList區(qū)別 -
class_rw_t和class_ro_t的區(qū)別 -
category如何被加載的,兩個category的load方法的加載順序,兩個category的同名方法的加載順序 -
category&extension區(qū)別,能給NSObject添加Extension嗎,結(jié)果如何 - 消息轉(zhuǎn)發(fā)機制,消息轉(zhuǎn)發(fā)機制和其他語言的消息機制優(yōu)劣對比
- 在方法調(diào)用的時候,
方法查詢-> 動態(tài)解析-> 消息轉(zhuǎn)發(fā)之前做了什么 -
IMP、SEL、Method的區(qū)別和使用場景 -
load、initialize方法的區(qū)別什么?在繼承關(guān)系中他們有什么區(qū)別 - 說說消息轉(zhuǎn)發(fā)機制的優(yōu)劣
Block
-
block的內(nèi)部實現(xiàn),結(jié)構(gòu)體是什么樣的 - block是類嗎,有哪些類型
- 一個
int變量被__block修飾與否的區(qū)別?block的變量截獲 -
block在修改NSMutableArray,需不需要添加__block - 怎么進行內(nèi)存管理的
-
block可以用strong修飾嗎 - 解決循環(huán)引用時為什么要用
__strong、__weak修飾 -
block發(fā)生copy時機 -
Block訪問對象類型的auto變量時,在ARC和MRC下有什么區(qū)別
多線程
主要以GCD為主
-
iOS開發(fā)中有多少類型的線程?分別對比 -
GCD有哪些隊列,默認(rèn)提供哪些隊列 -
GCD有哪些方法api -
GCD主線程 & 主隊列的關(guān)系 - 如何實現(xiàn)同步,有多少方式就說多少
-
dispatch_once實現(xiàn)原理 - 什么情況下會死鎖
- 有哪些類型的線程鎖,分別介紹下作用和使用場景
-
NSOperationQueue中的maxConcurrentOperationCount默認(rèn)值 -
NSTimer、CADisplayLink、dispatch_source_t的優(yōu)劣
性能優(yōu)化
如何做啟動優(yōu)化,如何監(jiān)控
如何做卡頓優(yōu)化,如何監(jiān)控
如何做耗電優(yōu)化,如何監(jiān)控
如何做網(wǎng)絡(luò)優(yōu)化,如何監(jiān)控
架構(gòu)設(shè)計
- 手動埋點、自動化埋點、可視化埋點
-
MVC、MVP、MVVM設(shè)計模式 - 常見的設(shè)計模式
- 單例的弊端
- 常見的路由方案,以及優(yōu)缺點對比
- 如果保證項目的穩(wěn)定性
- 設(shè)計一個圖片緩存框架(LRU)
- 如何設(shè)計一個
git diff - 設(shè)計一個線程池?畫出你的架構(gòu)圖
- 你的app架構(gòu)是什么,有什么優(yōu)缺點、為什么這么做、怎么改進
數(shù)據(jù)結(jié)構(gòu)與算法
- 八大排序算法
- 棧&隊列
- 字符串處理
- 鏈表
- 二叉樹相關(guān)操作
- 深搜廣搜
- 基本的動態(tài)規(guī)劃題、貪心算法、二分查找
總結(jié)
這些都是收集于最近面試中一些常見問題,歡迎各位業(yè)界高手留下更多的題目與答案!
更多iOS面試真題答案,可加 iOS技術(shù)探討群:937194184,群文件直接獲取
如下圖所示:
