iOS 内存泄露、野指针调试技巧

一、启用Zombie Object进行悬挂指针的检测

       一般来说,出现EXC_BAD_ACCESS错误的原因都是悬挂指针导致的,但具体是哪个指针是悬挂指针还不确定,因为控制台并没有给出具体crash信息。

      要想得到更多的crash信息,你需要启动NSZombieEnabled。具体步骤如下:1、选中Edit Scheme,并点击 2、Run -> Diagnostics -> Enable Zombie Objects 设置完之后,再次运行和点击悬挂指针,虽然会再次crash,但这次控制台打印了以下有用信息

      继续运行,在控制台上观察到出现野指针的地址,以及被_NSZombie_修饰的对象,此对象造成野指针的对象。

二、应用Product -> Analysis进行内存泄露的初步检测

      手动静态分析:每次都是通过点击菜单栏的Product -> Analyze或快捷键shift + command + b

     自动静态分析:在Build Settings启用Analyze During 'Build',每次编译时都会自动静态分析

三、instrument

      有时使用静态分析能够检查出一些内存泄露问题,但是有时只有运行时使用Instruments才能检查到

     点击Xcode的菜单栏的 Product -> Profile 启动Instruments

     出现Instruments的工具集,选中Leaks子工具点击

     打开Leaks工具之后,点击红色圆点按钮启动Leaks工具,在Leaks工具启动同时,模拟器或真机也跟着启动

    发现内存泄露之后的定位:

    首先点击Leak Checks时间条那个红色叉

    然后双击某行内存泄露调用栈,会直接跳到内存泄露代码位置

posted @ 2019-05-28 09:12  小妮子的奋斗时代  阅读(427)  评论(0编辑  收藏  举报