翻看了一些網(wǎng)上資料http://www.cocoachina.com/bbs/simple/?t36896.html,總結(jié)一下UIImage的內(nèi)存使用及管理
用UIImage加載圖像的方法很多,最常用的是下面兩種:
1.用imageNamed函數(shù)
[UIImage imageNamed:ImageName];
2.用NSData的方式加載蝉稳,例如:
NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension]; NSData *image = [NSData dataWithContentsOfFile:filePath]; [UIImage imageWithData:image];
由于第一種方式要寫的代碼比較少竖哩,可能比較多人利用imageNamed的方式加載圖像衔掸。其實這兩種加載方式都有各自的特點咒钟。
1)用imageNamed的方式加載時疏哗,系統(tǒng)會把圖像Cache到內(nèi)存糙臼。如果圖像比較大庐镐,或者圖像比較多,用這種方式會消耗很大的內(nèi)存变逃,而且釋放圖像的內(nèi)存是一件相對來說比較麻煩的事情必逆。例如:如果利用imageNamed的方式加載圖像到一個動態(tài)數(shù)組NSMutableArray,然后將將數(shù)組賦予一個UIView的對象的animationImages進行逐幀動畫,那么這將會很有可能造成內(nèi)存泄露名眉。并且釋放圖像所占據(jù)的內(nèi)存也不會那么簡單粟矿。但是利用imageNamed加載圖像也有自己的優(yōu)勢。對于同一個圖像系統(tǒng)只會把它Cache到內(nèi)存一次损拢,這對于圖像的重復利用是非常有優(yōu)勢的陌粹。例如:你需要在一個TableView里重復加載同樣一個圖標,那么用imageNamed加載圖像福压,系統(tǒng)會把那個圖標Cache到內(nèi)存掏秩,在Table里每次利用那個圖像的時候,只會把圖片指針指向同一塊內(nèi)存荆姆。這種情況使用imageNamed加載圖像就會變得非常有效蒙幻。
2)利用NSData方式加載時,圖像會被系統(tǒng)以數(shù)據(jù)方式加載到程序胆筒。當你不需要重用該圖像杆煞,或者你需要將圖像以數(shù)據(jù)方式存儲到數(shù)據(jù)庫,又或者你要通過網(wǎng)絡(luò)下載一個很大的圖像時腐泻,請盡量使用imageWithData的方式加載圖像决乎。
無論用哪種方式加載圖像,圖像使用結(jié)束后派桩,一定要記得顯示釋放內(nèi)存构诚。
所以當程序要加載大量圖片時贏盡量使用第二種方法。