ios載入圖片記憶體優化
阿新 • • 發佈:2019-01-29
以7張新增到bundle中的圖片通過NSTimer每2s執行一次載入操作為例:
圖片載入方式(2種):
(1)[UIImage imageNamed:圖片名];
實現過程:
程式載入打包到手機上 == 手機儲存空間
程式剛開始執行 == 手機記憶體
點選tom的某個動作按鈕,通過[UIImage imageNamed:a]掉用bundel中的a圖片 == 手機記憶體中執行的程式先從手機快取中去找a圖片,如果a不存在於快取中,便到手機儲存空間去找,然後載入,載入後將a圖片存於快取中,如果下次再用到a圖片,便直接從快取中去找(大量圖片都用此方法載入,這些圖片會一直存於快取中只能通過系統釋放記憶體,無法人為釋放,長時間幾類會造成崩潰)
(2)[[UIImage alloc]initWithContentsOfFile:圖片路徑];
實現過程:
圖片每次都從bundel中去載入,不會造成圖片存於快取中無法釋放
建議用此方法
圖片載入方式(2種):
(1)[UIImage imageNamed:圖片名];
實現過程:
程式載入打包到手機上 == 手機儲存空間
程式剛開始執行 == 手機記憶體
點選tom的某個動作按鈕,通過[UIImage imageNamed:a]掉用bundel中的a圖片 == 手機記憶體中執行的程式先從手機快取中去找a圖片,如果a不存在於快取中,便到手機儲存空間去找,然後載入,載入後將a圖片存於快取中,如果下次再用到a圖片,便直接從快取中去找(大量圖片都用此方法載入,這些圖片會一直存於快取中只能通過系統釋放記憶體,無法人為釋放,長時間幾類會造成崩潰)
(2)[[UIImage alloc]initWithContentsOfFile:圖片路徑];
實現過程:
圖片每次都從bundel中去載入,不會造成圖片存於快取中無法釋放
建議用此方法
用xcode得自帶的檢測工具對比兩種載入圖片記憶體的變化:
在當前工程下:Product ---> Profile ---> Allocations
截圖如下:
(1)[UIImage imageNamed:圖片名];
執行40s
約20s後快取變化
(2)[[UIImage alloc]initWithContentsOfFile:圖片路徑];
執行40s左右:
約20s後,快取變化為
第二種方式載入圖片,記憶體幾乎無變化
此文僅以7張圖片迴圈載入為例,如果用以上兩種方式載入更多圖片,記憶體差異必然會很明顯,所以如果不是經常出現的圖片建議還是用第二種方式載入
兩種載入方式比較最直觀的體現是前14s記憶體的變化,第一種方式前14秒以臺階式上升變化,記憶體一直在上升,說明圖片一直在往快取裡儲存,而後第二遍輪播開始,快取便無明顯變化。第二種方式幾乎從開始載入時,記憶體便一直是以直線形式迴圈載入的(當然偶爾出現一個高點的值,並在迴圈週期裡固定時間出現是因為某張圖片比其它圖片大);