硬盤-->內(nèi)存-->CPU
內(nèi)存泄露
- 靜態(tài)內(nèi)存分析
靜態(tài)內(nèi)存分析是不運行程序,直接對代碼進行分析.
但是沒有真正分配內(nèi)存,根據(jù)代碼的上下文的語法結(jié)構(gòu),來分析是否有內(nèi)存泄露
缺點:不一定準(zhǔn)確,但是如果發(fā)現(xiàn)有提示,那么去結(jié)合上下文看一下,這里的代碼是否有問題
快捷鍵:command +shift +b
進行方式:Product -- > Analyze
2.imageName和imageWithContentOfFile
imageName:加載圖片
1.當(dāng)對象銷毀,圖片對象不會隨著一起銷毀
2.加載的圖片占據(jù)的內(nèi)存較大:9.48
3.相同的圖片只會加載一份到內(nèi)存中,如果同時使用,使用同一個對象即可
imageWithContentOfFile:加載圖片
1.當(dāng)對象銷毀的時候,圖形對象會隨著一起銷毀
2.加載的圖片,占據(jù)的內(nèi)存較小:6.25
3.相同的圖片會多次加載到內(nèi)存中,如果同時使用圖片,使用的是不同的對象
總結(jié):
imageName:如果一些圖片在多個界面都會使用,并且圖片較小,使用頻率高.(圖標(biāo)/小的背景圖)
imageWithContentOfFile:只在一個地方使用,并且圖片較大,使用頻率不高.(版本新特性/相冊)
3.動態(tài)內(nèi)存分析
優(yōu)點:真正運行起來的程序,并且可以對某一個操作來具體分析,當(dāng)用戶做了某一個操作時,該操作是否產(chǎn)生了內(nèi)存泄露(分廠準(zhǔn)確,如果提示有內(nèi)存泄露,基本可以說明代碼有問題)
缺點:分析速度非常慢,需要一步一步來分析代碼是否有問題,切可能在分析過程中有遺漏代碼。
進行方式:Product --> Profile -->Leaks --> 選擇想要運行的項目 --> Record


這樣就可以開始動態(tài)檢測一個項目是否存在內(nèi)存泄露了。
注意:我們需要進行操作讓系統(tǒng)不斷去執(zhí)行所要檢測的代碼是否存在內(nèi)存泄露。
如果有內(nèi)存泄露會出現(xiàn)這樣的情況,由于筆者的 Xcode 是7.0 版本所以和 6.x 有所不同,但是使用是一樣的,我們點擊 Leak Checks 就能看到 Instrument 給出的提示。如果直接點擊會左邊的 Leaked Object 會進入?yún)R編的提示環(huán)境。

這里我們在右側(cè) Stack Trace 攔下點擊我們所創(chuàng)建的方法,也就是帶人像的方法,這樣就能定位到泄露的位置了。

之后點擊右上角 Xcode 的圖標(biāo)直接回到 Xcode 代碼中進行修改,這樣我們動態(tài)內(nèi)存分析就完成了。

注意:我們可能會看到這樣的情況, All Heap Allocations 是程序真實的內(nèi)存分配情況,All Anonymous VM則是系統(tǒng)為程序分配的虛擬內(nèi)存,為的就是當(dāng)程序有需要的時候,能夠及時為程序提供足夠的內(nèi)存空間,而不會現(xiàn)用現(xiàn)創(chuàng)建。
