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有哪些方法api
- GCD主線程 & 主隊列的關係
- 如何實現同步,有多少方式就說多少
- dispatch_once實現原理
- 什麼情況下會死鎖
- 有哪些類型的線程鎖,分別介紹下作用和使用場景
- NSOperationQueue中的maxConcurrentOperationCount默認值
- NSTimer、CADisplayLink、dispatch_source_t 的優劣
性能優化
- 如何做啟動優化,如何監控
- 如何做卡頓優化,如何監控
- 如何做耗電優化,如何監控
- 如何做網絡優化,如何監控
架構設計
- 手動埋點、自動化埋點、可視化埋點
- MVC、MVP、MVVM設計模式
- 常見的設計模式
- 單例的弊端
- 常見的路由方案,以及優缺點對比
- 如果保證項目的穩定性
- 設計一個圖片緩存框架(LRU)
- 如何設計一個git diff
- 設計一個線程池?畫出你的架構圖
- 你的app架構是什麼,有什麼優缺點、為什麼這麼做、怎麼改進
數據結構與算法
- 八大排序算法
- 棧&隊列
- 字符串處理
- 鏈表
- 二叉樹相關操作
- 深搜廣搜
- 基本的動態規劃題、貪心算法、二分查找
總結
這些都是收集於最近面試中一些常見問題,歡迎各位業界高手留下更多的題目與答案!需要更多iOS面試題,書籍資料,不如加入小編交流圈;與2000+iOS夥伴一起學習進步!私信回覆"1";即可進入;