iOS開發 正確選擇圖片加載方式

  • 正確選擇圖片加載方式能夠對內存優化起到很大的作用,常見的圖片加載方式有下面三種:

[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. //方法1  
  2. UIImage *imag1 = [UIImage imageNamed:@"image.png"];  
  3. //方法2  
  4. UIImage *image2 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];  
  5. //方法3  
  6. NSData *imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];  
  7. UIImage *image3 = [UIImage imageWithData:imageData];  

  • 第一種方法:imageNamed:

    爲什麼有兩種方法完成同樣的事情呢?imageNamed的優點在於可以緩存已經加載的圖片。蘋果的文檔中有如下說法:

    This method looks in the system caches for an image object with the specified name and returns that object if it exists. If a matching image object is not already in the cache, this method loads the image data from the specified file, caches it, and then returns the resulting object.

    這種方法會首先在系統緩存中根據指定的名字尋找圖片,如果找到了就返回。如果沒有在緩存中找到圖片,該方法會從指定的文件中加載圖片數據,並將其緩存起來,然後再把結果返回。對於同一個圖像,系統只會把它Cache到內存一次,這對於圖像的重複利用是非常有優勢的。例如:你需要在 一個TableView裏重複加載同樣一個圖標,那麼用imageNamed加載圖像,系統會把那個圖標Cache到內存,在Table裏每次利用那個圖 像的時候,只會把圖片指針指向同一塊內存。這種情況使用imageNamed加載圖像就會變得非常有效。


  • 第二種方法和第三種方法本質是一樣的:imageWithContentsOfFile:和imageWithData:
而imageWithContentsOfFile方法只是簡單的加載圖片,並不會將圖片緩存起來,圖像會被系統以數據方式加載到程序。當你不需要重用該圖像,或者你需要將圖像以數據方式存儲到數據庫,又或者你要通過網絡下載一個很大的圖像時,可以使用這種方式。
  • 如何選擇
[objc] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. //方法1 cach  
  2. UIImage *imag1 = [UIImage imageNamed:@"image.png"];  
  3. //方法2 no cach  
  4. UIImage *image2 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];  

如果加載一張很大的圖片,並且只使用一次,那麼就不需要緩存這個圖片。這種情況imageWithContentsOfFile比較合適,系統不會浪費內存來緩存圖片。
然而,如果在程序中經常需要重用的圖片,那麼最好是選擇imageNamed方法。這種方法可以節省出每次都從磁盤加載圖片的時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章