iOS界面啟動耗時檢測

背景:

近期在做公司內(nèi)部使用的iOS應(yīng)用性能檢測組件及項目性能優(yōu)化的工作,有個需求是能量化的統(tǒng)計各個界面的啟動耗時。

通常,項目中頁面啟動的耗時長短通常肉眼可見,但當(dāng)我們在對項目進行界面啟動耗時優(yōu)化時,我們通常需要知道VC啟動耗時的數(shù)據(jù),并收集進行對比,此時我們需要能夠?qū)崿F(xiàn)記錄界面啟動耗時的數(shù)據(jù)來進行量化的分析。


方案分析:


UIViewControlle生命周期圖

通常這種通用的需求,我們首先想到的方案便是使用AOP,針對VC的生命周期方法進行swizzle,打點記錄每個生命周期方法的時間點,即可獲取VC的耗時。但是實際實踐這種方案存在一個弊端,因為我們hook 的是UIViewController的方法,果我們在自己的 VC 中重寫了對應(yīng)的方法,并執(zhí)行了一些耗時的操作,那么這些操作的時間就沒有被計算進去。所以,基于這個方案,需要做進一步的改進。


目前使用的改進方案是:

1.對需要監(jiān)聽的類的實例化時進行KVO,監(jiān)聽一個不存在的KeyPath。通過它來創(chuàng)建子類。

2.對KVO創(chuàng)建出來的子類添加需要Swizzle的方法對應(yīng)的SEL及其IMP。因為本質(zhì)上KVO只是對setter和getter方法進行了override,如果不提供自定義的實現(xiàn),還是會調(diào)用到原來的類的IMP。

3.在實例銷毀的時候,將KVO監(jiān)聽移除,避免導(dǎo)致KVO still registering when deallocated這樣的Crash。

4.對于記錄的界面耗時記錄信息,收集到一份列表中,有一個recorder類維護列表,并提供一個List界面進行展示,可以在程序中直接查看檢測數(shù)據(jù)。


具體實現(xiàn)可見我的Github


參考:

巧妙利用KVO實現(xiàn)精準(zhǔn)的VC耗時檢測

一種基于KVO的頁面加載,渲染耗時監(jiān)控方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,192評論 8 265
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,030評論 0 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,621評論 1 32
  • 一、基礎(chǔ)知識點 設(shè)計模式是什么? 你知道哪些設(shè)計模式,并簡要敘述? 設(shè)計模式是一種編碼經(jīng)驗,就是用比較成熟的邏輯去...
    軟件iOS開發(fā)閱讀 1,383評論 0 26
  • 成果框架的四個部分: 1、積極正向的;我想報考一建,挑戰(zhàn)一下自己 2、在可控的范圍;我可以保證絕對我去參加考試 3...
    Eva_2115閱讀 616評論 0 0

友情鏈接更多精彩內(nèi)容