imageNamed 與 imageWithContentsOfFile的區別

郝萌主傾心貢獻,尊重作者的勞動成果,請勿轉載。

如果文章對您有所幫助,歡迎給作者捐贈,支持郝萌主,捐贈數額隨意,重在心意^_^ 

我要捐贈: 點擊捐贈

Cocos2d-X源碼下載:點我傳送


一般情況下,加載圖片都如下:

myImage = [UIImage imageNamed:@"icon.png"];
這種方法在一些圖片很少,或者圖片很小的程序裏是ok的。
但是,在大量加載圖片的程序裏,請千萬不要這樣做。
爲什麼呢 ???????


這種方法在application bundle的頂層文件夾尋找由供應的名字的圖象 。 如果找到圖片,裝載到iPhone系統緩存圖象。那意味圖片是(理論上)放在內存裏作爲cache的。

試想你圖片多了,是什麼後果``````
圖片cache極有可能不會響應 memory warnings and release its objects

所以,用圖片的時候一定要小心的alloc和release


推薦使用
NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
myImage = [UIImage imageWithContentsOfFile:path];


用UIImage加載圖像的方法很多,最常用的是下面兩種:

    1、用imageNamed函數

[UIImage imageNamed:ImageName];

    2、用NSData的方式加載,例如:

NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *image = [NSData dataWithContentsOfFile:filePath];
[UIImage imageWithData:image];

    由於第一種方式要寫的代碼比較少,可能比較多人利用imageNamed的方式加載圖像。


其實這兩種加載方式都有各自的特點。

    1)用imageNamed的方式加載時,系統會把圖像Cache到內存。

如果圖像比較大,或者圖像比較多,用這種方式會消耗很大的內存,而且釋放圖像的 內存是一件相對來說比較麻煩的事情。例如:如果利用imageNamed的方式加載圖像到一個動態數組NSMutableArray,然後將將數組賦予一 個UIView的對象的animationImages進行逐幀動畫,那麼這將會很有可能造成內存泄露。並且釋放圖像所佔據的內存也不會那麼簡單。

但是利 用imageNamed加載圖像也有自己的優勢。對於同一個圖像系統只會把它Cache到內存一次,這對於圖像的重複利用是非常有優勢的。例如:你需要在 一個TableView裏重複加載同樣一個圖標,那麼用imageNamed加載圖像,系統會把那個圖標Cache到內存,在Table裏每次利用那個圖 像的時候,只會把圖片指針指向同一塊內存。這種情況使用imageNamed加載圖像就會變得非常有效。

    2)利用NSData方式加載時,圖像會被系統以數據方式加載到程序。當你不需要重用該圖像,或者你需要將圖像以數據方式存儲到數據庫,又或者你要通過網絡下載一個很大的圖像時,請儘量使用imageWithData的方式加載圖像。

    無論用哪種方式加載圖像,圖像使用結束後,一定要記得顯示釋放內存。

郝萌主傾心貢獻,尊重作者的勞動成果,請勿轉載。

如果文章對您有所幫助,歡迎給作者捐贈,支持郝萌主,捐贈數額隨意,重在心意^_^ 

我要捐贈: 點擊捐贈

Cocos2d-X源碼下載:點我傳送


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