在這裡將為大家引見的是IOS app內存剖析套路的相關引見,詳細代碼請看下文
IOS app內存剖析套路 Xcode下檢查app內存運用狀況有2中辦法: Navigator導航欄中的Debug navigator中的Memory Instruments 一.Debug navigator中的Memory此辦法是檢查內存最復雜直接無效的辦法,真機調試時,經過Debug navigator中Memory檢查app內存,入口如圖
依據這個值檢查app內存占用,這個內存是以後app占用的總內存,是堆棧內存、虛擬內存(OpenGL占用的顯存算在虛擬內存中外面)的總和。
二.Instruments啟動Instruments的辦法是,Product->Profile,經過漫長的編譯時間後,呈現Instruments界面,下圖
Instruments中,可以剖析內存的工具有Activity Monitor,Allocations,Leaks。
(1)LeaksLeaks檢測內存洩露的工具,很有用。Leaks運轉中,看到上面這個紅叉叉就表示有內存洩露了
(2)AllocationsAllocations是檢測堆棧內存的,上面的VM tracker檢測虛擬內存。Allocations運轉起來如下圖
Allocations永遠比Debug navigator Memory中顯示的內存要小,就是由於Allocations中沒有統計虛擬內存。iOS把OpenGL占用的顯存算作虛擬內存的一局部,下圖參考自
When is a Leak not a Leak? Using Heapshot Analysis to Find Undesirable Memory Growth局部malloc出來的內存也算在虛擬內存中,下圖參考自A look at how malloc works on the Mac
(3)Activity monitorActivity monitor看手機全體內存狀況的,這裡的顯示app內存值和Debug navigator中的Memory顯示的值是一樣的
其他: 1. app最多能占用多少內存不閃退占用機器內存的一半左右就會閃退,和零碎版本、後台順序數有關。
不同渠道對內存有不同的要求,例如如下某渠道
2. iOS app為什麼內存沒有洩露,內存卻降不上去eg: 創立大約20個哥布林spine動畫,此時內存占用46M,然後釋放掉,內存占用居然還是46M,以為是spine有內存洩露,Leaks檢測沒有發現內存洩露。重復加載釋放20個哥布林,內存都沒有超越48M,但是為毛內存沒有下降,而是維持在46M左右?
由於(1)圖片參加了TextureCache,占用了局部內存(2)malloc出來的一局部內存算到了VM(虛擬內存)中,為了下次malloc速度更快,這局部內存雖然調用了free,但iOS零碎仍然沒有將其回收。這就是下面說的局部malloc出來的內存也算在虛擬內存中。這可以在mac模仿器上測試,malloc一塊4M的內存,然後free之,內存不降
3. 怎樣停止app內存測試(1) 用Leaks檢測內存洩露(2) 重復進入加入一個功用頁面,在Debug navigator中看內存是不是繼續上升。內存繼續上升闡明內存漏了。
通本學習您是不是更理解ios開發了呢.感激關注本站
【iOS app內存剖析套路】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!