iOS 載入圖片選擇imageNamed 方法還是 imageWithContentsOfFile?

來源:互聯網
上載者:User

標籤:

 

Apple官方的文檔為產生一個UIImage對象提供了兩種方法:

1. imageNamed,其參數為圖片的名字;

2. imageWithContentsOfFile,其參數也是圖片檔案的路徑。

那麼兩種有什麼區別嗎?

肯定是有的。根據Apple的官方文檔:

imageNamed: 這個方法用一個指定的名字在系統緩衝中尋找並返回一個圖片對象如果它存在的話。如果緩衝中沒有找到相應的圖片,這個方法從指定的文檔中載入然後緩衝並返回這個對象。因此imageNamed的優點是當載入時會緩衝圖片。所以當圖片會頻繁的使用時,那麼用imageNamed方法會比較好。例如:你需要在 一個TableView裡的TableViewCell裡都載入同樣一個表徵圖,那麼用imageNamed載入映像效率很高。系統會把那個表徵圖Cache到記憶體,在TableViewCell裡每次利用那個圖 像的時候,只會把圖片指標指向同一塊記憶體。正是因此使用imageNamed會緩衝圖片,即將圖片的資料放在記憶體中,iOS的記憶體非常珍貴並且在記憶體消耗過大時,會強制釋放記憶體,即會遇到memory warnings。而在iOS系統裡面釋放映像的記憶體是一件比較麻煩的事情,有可能會造成記憶體流失。例如:當一 個UIView對象的animationImages是一個裝有UIImage對象動態數組NSMutableArray,並進行逐幀動畫。當使用imageNamed的方式載入映像到一個動態數組NSMutableArray,這將會很有可能造成記憶體泄露。原因很顯然的。

imageWithContentsOfFile:僅載入圖片,映像資料不會緩衝。因此對於較大的圖片以及使用方式較少時,那就可以用該方法,降低記憶體消耗。

下面列舉出兩種方法的詳細用法:

 

[objc] view plain copy 
  1. NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];  
  2. UIImage *image = [UIImage imageWithContentsOfFile:path];  

以及:

 

 

 

[objc] view plain copy 
  1. NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:“png”];  
  2. NSData *image = [NSData dataWithContentsOfFile:filePath];  
  3. UIImage *image = [UIImage imageWithData:image]; //or = [UIImage imageWithContentsOfFile:filePath];  

 

再次強調兩種用法各有各的優點,需要針對具體的應用情境來使用他們。

 

iOS 載入圖片選擇imageNamed 方法還是 imageWithContentsOfFile?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.