iOS 内存泄露检查方法

1、关注项目中自己写的代码警告,并解决它。新版本的Xcode都是有提醒,是否有强引用的。
image.png
2、接下来看一下,项目常见的内存泄露,使用Xcode的Debug Memory Graph来查看内存图
image.png

视图层级

navigationController - ViewController - TestAViewController
2.0、在排查哪个控制器没有dealloc的话,优先检查某个控制器里面,是否有警告。
2.1、通知的Block实现
image.png
  • 1、第一次从ViewControllerpush到TestAViewController,并pop到ViewController的,打开内存图如下。
    • a、很明显能够看到,有一个Block在引用着TestAViewController。


      image.png
    • b、这时候,只需要复制Block块的内存,并在lldb中输入dis -s *(void**)(内存地址+16),就能反汇编查看方法调用栈。从控制台能够看出是initNoti方法,使用了这个Block。此方法参考:https://juejin.im/post/5d70655e518825618e67ad63

      image.png

2.2、NSTimer没有销毁
image.png
  • 1、第一次从ViewControllerpush到TestAViewController,并pop到ViewController的,打开内存图如下。

    image.png

    • a、观察上图,是无法查看,TestAViewController为什么没有被释放。
  • 2、第二次从ViewControllerpush到TestAViewController,并pop到ViewController的,打开内存图如下。

    image.png

    • a、很明显是NSTimer在引用着TestAViewController。
2.3、delete没有使用weak(代码是别人写的,有时候别人一时手快写错了)
image.png
  • 1、第一次从ViewControllerpush到TestAViewController,并pop到ViewController的,打开内存图如下。
    image.png
    • a、在第一次就能非常清晰地查看WTViewdelete在引用着TestAViewController
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,802评论 1 32
  • 面向对象的三大特性:封装、继承、多态 OC内存管理 _strong 引用计数器来控制对象的生命周期。 _weak...
    运气不够技术凑阅读 4,826评论 0 10
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类...
    司马DE晴空阅读 5,118评论 0 7
  • 【Task-任务】下笔不难,会看才会画(观察测量法)☆☆☆【过程】铅笔画线稿【画材】国誉 A4 图画本/马克铅笔【...
    寸丹心阅读 4,153评论 6 12
  • 时间的沉淀对于许多东西都是值得的 等待沉淀价值 时间并没有被浪费 它在入口的那一口被绽放 没有经历过时间沉淀的消费...
    Qynn阅读 7,404评论 1 0