一块儿来看看IOS内存泄漏的一个问题

不少iOS开发的朋友都是比较关心内存泄漏的问题,在实际的开发工做中首先咱们须要知道程序有没有内存泄露,而后定位究竟是哪行代码出现内存泄露了,这样才能将其修复。最简单的方法固然是借助于专业的检测工具,比较有名如BoundsCheck工具,功能很是强大。ios

  内存的泄漏是会关系到线上的稳定性和性能。内存泄露将会是致使这样的状况发生:xcode

  1.如果内存资源不足发生难以排查的线上bug缓存

  2.被泄露对象的存在,将会是致使的一些业务bug,例如是泄露的对象它们是仍在接受全局的一个通知app

  3.一些性能问题,是会致使用户使用app时愈来愈卡异步

  内存泄露发现分红静态扫描和运行时检测,本文主要讲运行时检测。工具

  关于静态扫描性能

  经常使用的一些静态扫描的工具:测试

  xcode analyzer编码

  OCLintcode

  Infer

  运行时动态检测

  由于在静态扫描不能发现全部的内存泄露问题,所以在运动时检测,是必不可少的一个操做。

  Allocation

一块儿来看看IOS内存泄漏的一个问题_ios内存_内存泄漏_ios开发_课课家

  Xcode中的的Allocation是能够经过比较不一样时间段的对象,用来是分析出是否发生了一些内存泄露。前提必须是每一个页面的命名要符合规范,就好比说宝贝详情页的全部对象,这些都是应用的前缀+宝贝详情页面前缀+具体对象名,当退出页面的时候才会是知道相应的对象是否被释放了,那是由于stack最底部的页面的对象常常是驻在内存中。

  Allocation是经过和Monkey配合,当在回归测试的时候,会自动运行并经过计算内存占用率,就能够判断出新的开发版本是否发生了内存泄露,可是没法知道具体是哪一个对象没有释放,局限性就是只能经过全局的一个判断。

  重点是如何排查?

  当发现了内存泄露后,排查并解决,这才是最关键的一步。开发者是根据泄露的对象,重点的去排查block和两个以上对象循环引用的最终状况。

  发现是ViewController发生内存泄露,就要是重点的去查看一下ViewController里面的block是否忘记声明weak了,当ViewController被其余对象持有的状况不常见。所以如果用RAC的话,这就要去记得weakly和strongly要成对出现,不然将会是发生内存的泄露。

  实际上最常发生的是View的内存泄露问题,首先查看是发生内存泄露的view之间是否有delegate的关系,如有,则去看delegate属性有没有声明weak,通常的因为service或者读取缓存等异步操做引发的内存泄露问题。

  解决内存泄漏的问题最主要的仍是在编码的时候尽可能的作到规范一些,学会利用工具去排查是积累经验的有效手段,静态扫描能解决一部分问题,动态扫描是最后的保证。

相关文章
相关标签/搜索