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
方法的加載順序,兩個category的同名方法的加載順序load
-
&category
差別,能給NSObject添加Extension嗎,結果如何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
-
有哪些方法apiGCD
-
主線程 & 主隊列的關系GCD
- 如何實作同步,有多少方式就說多少
-
實作原理dispatch_once
- 什麼情況下會死鎖
- 有哪些類型的線程鎖,分别介紹下作用和使用場景
-
中的NSOperationQueue
預設值maxConcurrentOperationCount
-
的優劣NSTimer、CADisplayLink、dispatch_source_t
性能優化
如何做啟動優化,如何監控
如何做卡頓優化,如何監控
如何做耗電優化,如何監控
如何做網絡優化,如何監控
架構設計
- 手動埋點、自動化埋點、可視化埋點
-
設計模式MVC、MVP、MVVM
- 常見的設計模式
- 單例的弊端
- 常見的路由方案,以及優缺點對比
- 如果保證項目的穩定性
- 設計一個圖檔緩存架構(LRU)
- 如何設計一個
git diff
- 設計一個線程池?畫出你的架構圖
- 你的app架構是什麼,有什麼優缺點、為什麼這麼做、怎麼改進
資料結構與算法
- 八大排序算法
- 棧&隊列
- 字元串處理
- 連結清單
- 二叉樹相關操作
- 深搜廣搜
- 基本的動态規劃題、貪心算法、二分查找
iOS面試題合集(上) - 專題 - 簡書www.jianshu.com

iOS面試題大全--(附答案)www.jianshu.com