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