Xcode8的调试技能又增加了一个黑科技:Debug Memory Graph。简单的说就是可以在运行时将内存中的对象生成一张图。它可以方便快捷的定位出内存泄漏问题,是iOS开发者的福音。
随着技术的不断进步,硬件的不断升级,iOS的内存管理机制早已从MRC升级到ARC,开发者不用过多的
关注内存泄漏问题,苹果系统已经帮大家处理好了绝大部分工作,让大家可以专心的编写逻辑代码。
当你的app功能持续叠加,文件越来越多,包体积越来越大时,如果你没有做好内存处理,那各种页面卡顿,手机使用app发热耗电快,莫名的崩溃问题逐渐暴露出来。
崩溃
崩溃就像是一种急性病,发病快,容易复现,可以快速的定位排除出原因,那解决就很方便了。业内也有很多的强大的崩溃日志捕获工具,比如bugly、友盟SDK、Google Analytics等等,可以帮助开发者快速定位分析。这块网上有丰富的资料,不再细述。
内存泄漏
而内存泄漏就像是慢性病,当内存泄漏时,程序不会立即崩溃,它会慢慢的侵蚀设备的内存,影响用户的体验,折磨用户的内心。当内存全部侵蚀完,就会执行内存警告方法,app回到初始状态。这个体验是非常糟糕的。
比如我们项目中因为各种原因导致的内存泄漏,原因可能是
1、NSTimer的使用不当
2、Block的循环引用
3、通知没有移除
这些内存泄漏导致的隐患不是马上就能发现的,很多程序员不能及时发现,这是很危险的,因为他不崩溃,也不报错,特殊情况下才能发现。
内存泄漏怎么治呢?
原先常见的方法:
1、通过静态检查工具,检查一些语法问题。只能检查一部分简单的潜在语法问题,许多动态运行的内存问题是检查不出来的。
2、通过人工代码code review,持续进行优化重构。比较耗时耗力,但这个工作不能不做,好的代码不仅是给机器看的,更是给人看的。
3、对一些卡顿、厚重的页面、类进行dealloc检查。体力劳动比较耗时。还有很多小的变量、闭包内存泄漏问题不能发现。
Debug Memory Graph
调试内存图横空出世,解决了这一难题,为什么,因为你只需要点一下这个图标,就可以很直观的看到哪个VC还没有释放,这样的调试界面更人性化了,让我们苦逼的程序员用肉眼很直观的看到内存图。Debug Memory Graph 操作超级简单,结果快速高效,问题清晰了然。
操作步骤:
1、运行你的程序,把自己的页面、功能全部跑一遍。
2、点击控制台工具栏。
3、立即生成内存截图。
4、有紫色感叹号,表示有内存泄漏。(有紫色感叹号不一定泄漏,没有姿色感叹号可能存在泄漏。)
5、有些实例虽然没有显示感叹号,但是如果存在多份,也表示不能及时释放。可能产生内存高峰,潜在威胁。
6、没有感叹号,也可能存在内存泄漏!
代码示例
总结
Debug Memory Graph工具强大,操作方便,可以快速的定位出内存泄漏问题。但也有一些缺点,工具只是辅助手段,
经常会出现误报、漏报的情况。有姿色感叹号,不一定泄漏,没有姿色感叹号,也可能存在泄漏。不管怎么说,这也是苹果的一大进步,可以提高开发者定位分析的效率。