美文网首页
iOS性能优化 - 工具Instruments之Leaks内存泄

iOS性能优化 - 工具Instruments之Leaks内存泄

作者: Simba_LX | 来源:发表于2018-08-01 15:21 被阅读36次

    一、内存泄漏

    • 内存泄露指当一个对象或变量在使用完成后没有释放掉, 这个对象一直占用着这部分内存, 直到应用停止。

    二、内存泄漏的原因分析

    • 在目前主要以ARC进行内存管理的开发模式,导致内存泄漏的根本原因是代码中存在循环引用,从而导致一些内存无法释放,这就会导致dealloc()方法无法被调用。主要原因大概有一下几种类型:

    (1)动画效果产生的无限循环

    (2)多个对象间的相互强引用

    (3)定时器NSTimer的使用

    (4)代码块block的强引用

    (5)代理delegate未使用正确的方法修饰

    • 解决方法:

    (1)在视图控制器即将消失时,移除动画特效;

    (2)对象间采用弱引用;

    (3)在视图控制器即将消失时,停止定时特效;

    (4)代码块中的使用弱引用;

    (5)尽量使用assign或者weak;

    • 要注意一点,并非所有的block都需要使用weak来打破循环引用,如果self没有持有block就不会造成循环引用。

    三、查找泄漏点 (两种工具)

    1. Analyze
    • 学 名: 静态分析工具
    • 查 找: 可以通过 Product ->Analyze 菜单项启动
    • 快捷键: CMD+shift +b
    • Analyze主要分析以下四种问题:
      1. 逻辑错误:访问空指针或未初始化的变量等;
      2. 内存管理错误:如内存泄漏等;
      3. 声明错误:从未使用过的变量;
      4. Api调用错误:未包含使用的库和框架。
    1. Instruments-Leaks
    • 学 名: 动态分析工具
    • 查 找: Product ->Profile 菜单项启动
    • 快捷键: CMD + i
    • 简 介:它有很多跟踪模块可以动态分析和跟踪内存, CPU 和文件系统。

    四、Analyze使用方法

    • 在 Analyze 静态分析结果中, 凡是有图标


      image

      都是工具发现的疑似泄露点。

    • 注意:这里使用Analyze查找出来的泄漏点,称之为“可疑泄漏点”。之所以称之为"可疑泄漏点",是因为这些点未必一定泄露,确认这些点是否泄露, 还要通过 Instruments 动态分析工具的 Leaks 和 Allocations 跟踪模板. Analyze 静态分析只是一个理论上的预测过程。

    五、Leaks使用方法

    • 1.界面介绍


      image

    在 instruments 中,虽然选择了 Leaks 模板,但默认情况下也会添加 Allocations 模板.基本上凡是内存分析都会使用 Allocations 模板, 它可以监控内存分布情况。

    ① 选中 Allocations 模板,(图1区域),右边的3区域会显示随着时间的变化内存使用的折线图,同时在4区域会显示内存使用的详细信息,以及对象分配情况。

    ② 点击 Leaks 模板(图中2区域), 可以查看内存泄露情况。如果在3区域有 红X 出现, 则有内存泄露, 4区域则会显示泄露的对象。

    • 2.使用Leaks进行监测

    点击泄露对象可以在(下图)看到它们的内存地址, 占用字节, 所属框架和响应方法等信息.打开扩展视图, 可以看到右边的跟踪堆栈信息

    image
    • 3.监测结果分析:
    image

    相关文章

      网友评论

          本文标题:iOS性能优化 - 工具Instruments之Leaks内存泄

          本文链接:https://www.haomeiwen.com/subject/skkrvftx.html