1. 程式人生 > >ios載入圖片記憶體優化

ios載入圖片記憶體優化

以7張新增到bundle中的圖片通過NSTimer每2s執行一次載入操作為例:
    圖片載入方式(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秒以臺階式上升變化,記憶體一直在上升,說明圖片一直在往快取裡儲存,而後第二遍輪播開始,快取便無明顯變化。第二種方式幾乎從開始載入時,記憶體便一直是以直線形式迴圈載入的(當然偶爾出現一個高點的值,並在迴圈週期裡固定時間出現是因為某張圖片比其它圖片大);