一、内存的重要性
程序是否可用的最根本的制约因素。
十分影响用户体验。
程序的crash有很多情况都是内存的原因。
二、iOS平台内存警告机制
iOS系统不支持虚拟内存,一旦出现内存不足的情况,iOS系统会通知所有app,无论是前台的还是挂起的,都会收到memory warning的通知,一旦app收到memory warning的通知就应该回收占用内存较大的对象。
内存警告测试方法:iOS模拟器->硬件->模拟内存警告。
iOS6废除了viewDidUnload函数,所以要把之前viewDidUnload中做的事情放在didReceiveMemoryWarning中
三、静态分析工具——Analyze
Analyze是一个编译和分析工具,可以发现编译中的warning,内存泄露隐患,有时还可以查处逻辑上的问题。
内存泄露隐患提示:
Potential Leak of an object allocated on line ……
数据赋值隐患提示:
The left operand of …… is a garbage value;
对象引用隐患提示:
Reference-Counted object is used after it is released;
Analyze发现的问题值得我们注意,但它只是提出隐患,并不一定就存在问题。
Analyze运行方法:Product->Analyze,或者长按运行按钮,选择Analyze。
四、动态分析工具——Instrument
启动instrument:Xcode->product->profile,选择相应的工具,点击profile按钮。
显示所有instrument工具:window->library.下面的按钮是调整显示方式,搜索栏是搜素某一工具。上面可以按某一功能选择工具。还可以按自己的方式组织instrument工具。我们这里只介绍和内存相关的Allocations和leaks
Allocations:跟踪内存分配的工具
Category:通常是一个Core Foundation对象、OC类等。
Live Bytes:当前活动内存大小。
#Living:存在的对象个数。
#Transient:已经销毁的对象个数。
Overall Bytes:所开辟的所有内存。
#Overall:所创造出来的所有对象个数。
#Allocations(Net/Overall)当前和全部的比值。
Leaks:跟踪内存泄露的工具