GPU:硬件層面。
-
CPU:軟件層面长赞。程序運(yùn)行時(shí)分分配內(nèi)存晦攒。
1. 對(duì)象創(chuàng)建了卻沒(méi)有使用闽撤,也沒(méi)有釋放。 2. 對(duì)象一直是nil脯颜。 3. setObject的key和value不能為nil哟旗,value為nil也會(huì)占用不必要內(nèi)存。 4. 用到C函數(shù)方法要特別的逐一栋操,C還是MRC機(jī)制闸餐,例如CoreGraphics庫(kù)、Core Foundation對(duì)象的要特別注意矾芙,需要手動(dòng)釋放舍沙。 5. 類對(duì)象沒(méi)有重用好,或者內(nèi)存分配空間多余剔宪。 6. 錯(cuò)用空指針拂铡。
從理論上,APP內(nèi)存泄漏大部分是對(duì)象和變量未釋放葱绒,導(dǎo)致APP運(yùn)行內(nèi)存越來(lái)越大感帅,直到GPU、CPU其中一方承受不了直接崩潰地淀。但并非完全是未釋放的對(duì)象和變量引起的泄漏失球,更多需要借助工具來(lái)檢查。
Xcode提供了檢測(cè)工具:Analyze帮毁、Instruments实苞、Leaks
一、Analyze靜態(tài)分析檢測(cè)
Analyze靜態(tài)分析檢測(cè)不需要運(yùn)行程序烈疚,使用方法:打開xcode項(xiàng)目黔牵,按快捷鍵command + shift + B, 或者是:打開Xcode-->Product-->Analyze,逐一去解決就好了胞得。
Analyze使用方式之一.png
Analyze靜態(tài)分析檢測(cè)結(jié)果有24條泄漏/雞肋.png
Analyze靜態(tài)分析泄漏位置.png
例子.png
二荧止、Instruments
- Instruments動(dòng)態(tài)分析檢測(cè)需要運(yùn)行程序,最好是使用真機(jī)調(diào)試阶剑,真機(jī)的GPU硬件跟CPU軟件層面跟Mac上模擬器差別有大跃巡。使用方式:打開Xcode,Xcode --> Open developer Tool --> Instruments; 或者command + i牧愁。經(jīng)過(guò)靜態(tài)分析之后基本就沒(méi)什么問(wèn)題了素邪,Inastruments有時(shí)候能指出泄漏的地方具體在哪里,大部分沒(méi)什么修復(fù)意義猪半。
(1)Leaks
-
Leaks用來(lái)分析內(nèi)存泄漏
leaks發(fā)現(xiàn)泄漏.png
(2)Allocations
-
Allocations用來(lái)分析內(nèi)存分配情況兔朦,
Allocation.png