美文网首页 Objective - C 开发那些事
iOS 利用runtime自定义内存检测工具(UIViewCon

iOS 利用runtime自定义内存检测工具(UIViewCon

作者: huxinwen | 来源:发表于2019-05-07 18:10 被阅读171次

    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动态交换这些时机方法。

    代码实现:

    UINavigationController(HxwLeak)时机方式扑捉并处理:

    扑捉释放时机

    UIViewController(HxwLeak)  dismiss时机及处理延时任务

    dismiss时机及处理延时任务

    以上就是这些,具体见demo

    相关文章

      网友评论

        本文标题:iOS 利用runtime自定义内存检测工具(UIViewCon

        本文链接:https://www.haomeiwen.com/subject/spbeoqtx.html