導(dǎo)致卡頓問題的幾種原因:
復(fù)雜 UI 鸭丛、圖文混排的繪制量過大竞穷;
在主線程上做網(wǎng)絡(luò)同步請求;
在主線程做大量的 IO 操作鳞溉;
運算量過大瘾带,CPU 持續(xù)高占用;
死鎖和主子線程搶鎖熟菲。
RunLoop原理:
對于 iOS 開發(fā)來說月弛,監(jiān)控卡頓就是要去找到主線程上都做了哪些事兒肴盏。我們都知道,線程的消息事件是依賴于 NSRunLoop 的帽衙,所以從 NSRunLoop 入手菜皂,就可以知道主線程上都調(diào)用了哪些方法。我們通過監(jiān)聽 NSRunLoop 的狀態(tài)厉萝,就能夠發(fā)現(xiàn)調(diào)用方法是否執(zhí)行時間過長恍飘,從而判斷出是否會出現(xiàn)卡頓。
所以谴垫,我推薦的監(jiān)控卡頓的方案是:通過監(jiān)控 RunLoop 的狀態(tài)來判斷是否會出現(xiàn)卡頓章母。