imageNamed 與 imageWithContentsOfFile的區別,uiimageimagenamed

來源:互聯網
上載者:User

imageNamed 與 imageWithContentsOfFile的區別,uiimageimagenamed

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

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

我要捐贈: 點擊捐贈

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源碼下載:點我傳送


聯繫我們

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