美文网首页iOS性能调优iOS性能优化相关iOS测试发布相关
使用MsLeak以及Instument调试解决iOS内存泄露

使用MsLeak以及Instument调试解决iOS内存泄露

作者: 慧众rodman | 来源:发表于2016-05-09 15:06 被阅读870次

    使用MsLeak以及Instument调试解决iOS内存泄露


    工具和描述参考网络内容整理,http://www.raywenderlich.com/
    补充MSleakHunter demo说明
    rodman整理
    

    虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在。你要相信我,做一个app终归是会比较复杂的。

    这里收集传统常用的Xcode和Instruments定位方法,以及新秀内存泄露定位工具MSleakHunter。

    使用Xcode和Instruments调试解决iOS内存泄露

    运行Demo

    先下载一个实现准备好的内存泄露的Demo吧:leakapp
    下载下来,打开运行,程序是一个寿司的列表,列出各种寿司卷。试着选择里面的几行,应该是选第二行的时候就崩溃了。崩溃截图:

  1. 在build Phases中修改leaker hunter相关的M文件不使用arc


  2. 在AppDelegate文件中引用leakHunter,并做初始化

  3. 参考代码:

    #import "MSLeakHunter.h"
    #import "MSViewControllerLeakHunter.h"
    #import "MSViewLeakHunter.h"
    #import “MSZombieHunter.h"
     
    #if MSLeakHunter_ENABLED
            [MSLeakHunter installLeakHunter:[MSViewControllerLeakHunter class]];
        #endif
        
    #if MSViewLeakHunter_ENABLED
            [MSLeakHunter installLeakHunter:[MSViewLeakHunter class]];
        #endif
    

    确保MSVCLeakHunter.h中,MSVCLeakHunter_ENABLED 被设置为1

    参考范例如下

    辅助问题分析和定位

    • 启动app并配合xCode查看运行状况,如下图一能看到内存的使用数值和走势,下图二会打印可能存在内存泄露的嫌疑内容。
    • 内存有持续增长,且提示有泄露时,可以考虑使用LeakHunter提供的方法打断点

    一旦你知道它的存在泄露,这个工具可以让你调试泄漏。可以考虑使用LeakHunter打断点提供了一个非常简单的方法使调试器停止在你关注的对象上。在msleakhunterretainbreakpointshelper.H中,用此方法监视你要的对象。可以帮助你找出额外的-retain调用,或谁在保留对象但不释放它.

    ms_enablememorymanagementmethodbreakpointsonobject(object)在调用-retain, -release, -autorelease, 或者-dealloc释放该对象后,调试器将停止应用监控。此时如果查看堆栈,可以看到在你的应用程序中谁造成调用这些方法,这能帮助你调试内存管理的问题。

    注:msleakhunterretainbreakpointshelper已经被编译non arc。如果您的项目ARC,请参阅本指南点击查看,以了解如何禁用该文件。

    MSZombieHunter的使用

    MSZombieHunter默认是nszombieenabled,你可以通过以下方法启用他

        +[MSZombieHunter enable];
    

    开启之后,一旦被监控的对象释放,MSZombieHunter会抛出exception,方便你立即捕获。

    重要说明
    使mszombiehunter使所有对象收到dealloc消息仍旧保持存活,成倍增加了应用程序的内存使用情况。因为这个原因,只是建议在模拟器上启用它,或者当你试图调试一个exc_bad_access崩溃时使用。

    相关文章

      网友评论

        本文标题:使用MsLeak以及Instument调试解决iOS内存泄露

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