你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> iOS 正確選擇圖片加載方式

iOS 正確選擇圖片加載方式

編輯:IOS技巧綜合
[摘要]本文是對iOS 正確選擇圖片加載方式的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。

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

//方法1  
UIImage *imag1 = [UIImage imageNamed:@"image.png"];  
//方法2  
UIImage *image2 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];  
//方法3  
NSData *imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image.png" ofType:nil]];  
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加載圖像就會變得非常有效。

  然而,正是因此使用imageNamed會緩存圖片,即將圖片的數據放在內存中,iOS的內存非常珍貴並且在內存消耗過大時,會強制釋放內存,即會遇到memory warnings。而在iOS系統裡面釋放圖像的內存是一件比較麻煩的事情,有可能會造成內存洩漏。例如:當一 個UIView對象的animationImages是一個裝有UIImage對象動態數組NSMutableArray,並進行逐幀動畫。當使用imageNamed的方式加載圖像到一個動態數組NSMutableArray,這將會很有可能造成內存洩露。原因很顯然的。

第二種方法和第三種方法本質是一樣的:imageWithContentsOfFile:和imageWithData:

imageWithContentsOfFile:僅加載圖片,圖像數據不會緩存,圖像會被系統以數據方式加載到程序。因此對於較大的圖片以及使用情況較少時,那就可以用該方法,降低內存消耗。

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

NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];  
UIImage *image = [UIImage imageWithContentsOfFile:path];  

以及:

NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:“png”];  
NSData *image = [NSData dataWithContentsOfFile:filePath];  
UIImage *image = [UIImage imageWithData:image]; //or = [UIImage imageWithContentsOfFile:filePath];  

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

  

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved