iOS 正確選擇圖片載入方式,ios正確選擇

來源:互聯網
上載者:User

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方法。這種方法可以節省出每次都從磁碟載入圖片的時間。

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.