iOS Learning

Xcode8调试黑科技:Debug Memory Graph

2017-06-22  本文已影响689人  晴天咚咚

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、点击控制台工具栏。

D051CAFB-7B05-4021-846C-351512FB51AB.png

3、立即生成内存截图。

BAA118C4-B200-44DE-8652-6B7866CADB0B.png 9DF096FD-07C2-4EAE-B774-3C9E4BE90325.png

4、有紫色感叹号,表示有内存泄漏。(有紫色感叹号不一定泄漏,没有姿色感叹号可能存在泄漏。)

9DF096FD-07C2-4EAE-B774-3C9E4BE90325.png

5、有些实例虽然没有显示感叹号,但是如果存在多份,也表示不能及时释放。可能产生内存高峰,潜在威胁。

6、没有感叹号,也可能存在内存泄漏!

D051CAFB-7B05-4021-846C-351512FB51AB.png

代码示例

总结

Debug Memory Graph工具强大,操作方便,可以快速的定位出内存泄漏问题。但也有一些缺点,工具只是辅助手段,
经常会出现误报、漏报的情况。有姿色感叹号,不一定泄漏,没有姿色感叹号,也可能存在泄漏。不管怎么说,这也是苹果的一大进步,可以提高开发者定位分析的效率。

上一篇下一篇

猜你喜欢

热点阅读