iOS 利用runtime自定义内存检测工具(UIViewController)
共 735字,需浏览 2分钟
·
2019-11-11 14:49
UIViewController是我们在iOS开发中用的最频繁的类,是一个iOS app界面骨架,在mvc的框架下,v就是指UIViewController,几乎所有的业务逻辑都在这里面完成,因此在这种模式下,UIViewController的代码量比较大,进而出现内存泄漏的风险也比较大,因此很有必要在开发的过程中,对其进内存泄漏的检测。
内存泄漏的工具有很多,Xcode就自带了集中方式,例如analyze,instrument中的leaks,还有第三方工具MLeakFinder等等。在检测的时候,虽然不是100%能够检测出来,但是大部分都是没问题的,本文就是在研究MLeakFinder第三方库的基础上,根据据自己的理解,自己写的一个关于UIViewController的自定义内存检测工具。
原理分析:
1、dispatch_after这个是GCD提供的一个延时处理事物的方式,只需要将延时的任务放到block中,设置好时长即可,而我们将一个弱引用对象放到block中,不会影响对象的释放,就有如下的代码:
通常情况下,UIViewController的释放都是在被UINavigationController pop或者presenter出来后自身dismiss这两个时机后,而且一定会走viewDidDisappear这个方法,但是不是所有的viewWillDisappear都是这两个时机,所以需要区分标记。
另外,为了做到不侵入式,需要用到分类,通过runtime动态交换这些时机方法。
代码实现:
UIViewController(HxwLeak) dismiss时机及处理延时任务
以上就是这些,具体见demo。