以前就一直遇到过内存泄露、内存消耗过大的问题,之前解决了但是一直没有把自己的处理方式跟走过的一些坑列出来,今天就在这里把坑整下。
1、查找泄漏点 (两种工具)
在 Xcode 自带了两种内存泄露查询工具:
1 > Analyze
- 学 名: 静态分析工具- 查 找: 可以通过 Product ->Analyze 菜单项启动- 快捷键: CMD+shift +b.- Analyze主要分析以下四种问题:
1) 逻辑错误:访问空指针或未初始化的变量等;
2) 内存管理错误:如内存泄漏等;
3) 声明错误:从未使用过的变量;
4) Api调用错误:未包含使用的库和框架。
2 >Instruments
- 学 名: 动态分析工具- 查 找: Product ->Profile 菜单项启动- 快捷键: CMD + i.- 简 介:它有很多跟踪模块可以动态分析和跟踪内存, CPU 和文件系统.
界面的介绍
在 instruments 中,虽然选择了 Leaks 模板,但默认情况下也会添加 Allocations 模板.基本上凡是内存分析都会使用 Allocations 模板, 它可以监控内存分布情况。
① 选中 Allocations 模板,(图1区域),右边的3区域会显示随着时间的变化内存使用的折线图,同时在4区域会显示内存使用的详细信息,以及对象分配情况.
② 点击 Leaks 模板(图中2区域), 可以查看内存泄露情况。如果在3区域有 红X 出现, 则有内存泄露, 4区域则会显示泄露的对象.
3) 打用leaks进行监测:
点击泄露对象可以在(下图)看到它们的内存地址, 占用字节, 所属框架和响应方法等信息.打开扩展视图, 可以看到右边的跟踪堆栈信息
leaks进行监测
4) 监测结果的分析:
这是关于查询内存泄露的部分的操作。至于怎么查看内存消耗过多的部分其实是跟leaks的使用是类似的。
同样在instrument面板上选中Allocations
具体的操作跟leaks的操作类似,大致的可以得出具体是哪个地方内存消耗过大,其次还有xcode8新出的debugMemoryGraph对内存调试也很有帮助,再这里就不一一描述了。