1、内存泄漏
- 内存泄露指当一个对象或变量在使用完成后没有释放掉, 这个对象一直占用着这部份内存, 直到应用中止。
2、内存泄漏的缘由分析
- 在目前主要以ARC进行内存管理的开发模式,致使内存泄漏的根本缘由是代码中存在循环引用,从而致使一些内存没法释放,这就会致使dealloc()方法没法被调用。主要缘由大概有一下几种类型:
(1)动画效果产生的无限循环markdown
(2)多个对象间的相互强引用框架
(3)定时器NSTimer的使用工具
(4)代码块block的强引用动画
(5)代理delegate未使用正确的方法修饰spa
(1)在视图控制器即将消失时,移除动画特效;代理
(2)对象间采用弱引用;指针
(3)在视图控制器即将消失时,中止定时特效;code
(4)代码块中的使用弱引用;orm
(5)尽可能使用assign或者weak;对象
- 要注意一点,并不是全部的block都须要使用weak来打破循环引用,若是self没有持有block就不会形成循环引用。
3、查找泄漏点 (两种工具)
- Analyze
- 学 名: 静态分析工具
- 查 找: 能够经过 Product ->Analyze 菜单项启动
- 快捷键: CMD+shift +b
- Analyze主要分析如下四种问题:
- 逻辑错误:访问空指针或未初始化的变量等;
- 内存管理错误:如内存泄漏等;
- 声明错误:从未使用过的变量;
- Api调用错误:未包含使用的库和框架。
- Instruments-Leaks
- 学 名: 动态分析工具
- 查 找: Product ->Profile 菜单项启动
- 快捷键: CMD + i
- 简 介:它有不少跟踪模块能够动态分析和跟踪内存, CPU 和文件系统。
4、Analyze使用方法
- 在 Analyze 静态分析结果中, 凡有图标
都是工具发现的疑似泄露点。
- 注意:这里使用Analyze查找出来的泄漏点,称之为“可疑泄漏点”。之因此称之为"可疑泄漏点",是由于这些点未必必定泄露,确认这些点是否泄露, 还要经过 Instruments 动态分析工具的 Leaks 和 Allocations 跟踪模板. Analyze 静态分析只是一个理论上的预测过程。
5、Leaks使用方法
- 1.界面介绍
在 instruments 中,虽然选择了 Leaks 模板,但默认状况下也会添加 Allocations 模板.基本上凡是内存分析都会使用 Allocations 模板, 它能够监控内存分布状况。
① 选中 Allocations 模板,(图1区域),右边的3区域会显示随着时间的变化内存使用的折线图,同时在4区域会显示内存使用的详细信息,以及对象分配状况。
② 点击 Leaks 模板(图中2区域), 能够查看内存泄露状况。若是在3区域有 红X 出现, 则有内存泄露, 4区域则会显示泄露的对象。
点击泄露对象能够在(下图)看到它们的内存地址, 占用字节, 所属框架和响应方法等信息.打开扩展视图, 能够看到右边的跟踪堆栈信息