iOS 利用runtime自定義內(nèi)存檢測(cè)工具(UIViewController)
UIViewController是我們?cè)趇OS開發(fā)中用的最頻繁的類,是一個(gè)iOS app界面骨架,在mvc的框架下,v就是指UIViewController,幾乎所有的業(yè)務(wù)邏輯都在這里面完成,因此在這種模式下,UIViewController的代碼量比較大,進(jìn)而出現(xiàn)內(nèi)存泄漏的風(fēng)險(xiǎn)也比較大,因此很有必要在開發(fā)的過程中,對(duì)其進(jìn)內(nèi)存泄漏的檢測(cè)。
內(nèi)存泄漏的工具有很多,Xcode就自帶了集中方式,例如analyze,instrument中的leaks,還有第三方工具M(jìn)LeakFinder等等。在檢測(cè)的時(shí)候,雖然不是100%能夠檢測(cè)出來,但是大部分都是沒問題的,本文就是在研究MLeakFinder第三方庫的基礎(chǔ)上,根據(jù)據(jù)自己的理解,自己寫的一個(gè)關(guān)于UIViewController的自定義內(nèi)存檢測(cè)工具。
原理分析:
1、dispatch_after這個(gè)是GCD提供的一個(gè)延時(shí)處理事物的方式,只需要將延時(shí)的任務(wù)放到block中,設(shè)置好時(shí)長即可,而我們將一個(gè)弱引用對(duì)象放到block中,不會(huì)影響對(duì)象的釋放,就有如下的代碼:
通常情況下,UIViewController的釋放都是在被UINavigationController pop或者presenter出來后自身dismiss這兩個(gè)時(shí)機(jī)后,而且一定會(huì)走viewDidDisappear這個(gè)方法,但是不是所有的viewWillDisappear都是這兩個(gè)時(shí)機(jī),所以需要區(qū)分標(biāo)記。

另外,為了做到不侵入式,需要用到分類,通過runtime動(dòng)態(tài)交換這些時(shí)機(jī)方法。
代碼實(shí)現(xiàn):

UIViewController(HxwLeak)?dismiss時(shí)機(jī)及處理延時(shí)任務(wù)

以上就是這些,具體見demo。
