-
GPU:硬件层面。
-
CPU:软件层面。程序运行时分分配内存。
1. 对象创建了却没有使用,也没有释放。 2. 对象一直是nil。 3. setObject的key和value不能为nil,value为nil也会占用不必要内存。 4. 用到C函数方法要特别的逐一,C还是MRC机制,例如CoreGraphics库、Core Foundation对象的要特别注意,需要手动释放。 5. 类对象没有重用好,或者内存分配空间多余。 6. 错用空指针。
-
从理论上,APP内存泄漏大部分是对象和变量未释放,导致APP运行内存越来越大,直到GPU、CPU其中一方承受不了直接崩溃。但并非完全是未释放的对象和变量引起的泄漏,更多需要借助工具来检查。
-
Xcode提供了检测工具:Analyze、Instruments、Leaks
一、Analyze静态分析检测
Analyze静态分析检测不需要运行程序,使用方法:打开xcode项目,按快捷键command + shift + B, 或者是:打开Xcode-->Product-->Analyze,逐一去解决就好了。
Analyze使用方式之一.png Analyze静态分析检测结果有24条泄漏/鸡肋.pngAnalyze静态分析泄漏位置.png
例子.png
二、Instruments
- Instruments动态分析检测需要运行程序,最好是使用真机调试,真机的GPU硬件跟CPU软件层面跟Mac上模拟器差别有大。使用方式:打开Xcode,Xcode --> Open developer Tool --> Instruments; 或者command + i。经过静态分析之后基本就没什么问题了,Inastruments有时候能指出泄漏的地方具体在哪里,大部分没什么修复意义。
(1)Leaks
-
Leaks用来分析内存泄漏
leaks发现泄漏.png
(2)Allocations
-
Allocations用来分析内存分配情况,
Allocation.png
网友评论