ImageName 和 ImageWithContentsOfFile

1 [UIImage imageNamed:ImageName];

當(dāng)圖片文件較小 , 使用比較頻繁的時(shí)候那么使用 imageNamed 比較好.例如:UITableViewCell , UICollectionCell 等加載同一個(gè)圖標(biāo)的時(shí)候 , 在Table里每次利用那個(gè)圖像的時(shí)候,只會(huì)把圖片指針指向同一塊內(nèi)存??梢灾苯訌木彺嬷腥〉臄?shù)據(jù)而不用遍歷整個(gè)工程.在這種情況下 imageNamed 的效率還是非常高的.同一個(gè)圖片對(duì)象系統(tǒng)只會(huì)把它 Cache 到內(nèi)存一次 , 這對(duì)圖像的重復(fù)利用是非常有優(yōu)勢(shì)的.

2 NSString *thumbnailFile = [NSString stringWithFormat:@"%@/%@.png", [[NSBundle mainBundle] resourcePath], fileName]; UIImage *thumbnail = [UIImage imageWithContentsOfFile:thumbnailFile];

你用第二種方式加載的時(shí)候 , 圖像會(huì)被系統(tǒng)以數(shù)據(jù)的形式加載到程序 . 當(dāng)你不需要重用該圖像,或者你需要將圖像以數(shù)據(jù)方式存儲(chǔ)到數(shù)據(jù)庫(kù),又或者你要通過(guò)網(wǎng)絡(luò)下載一個(gè)很大的圖像時(shí),請(qǐng)盡量使用imageWithData的方式加載圖像。

3 UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath]

第一種方法為常見(jiàn)方法,利用它可以方便加載資源圖片。用imageNamed的方式加載時(shí),會(huì)把圖像數(shù)據(jù)根據(jù)它的名字緩存在系統(tǒng)內(nèi)存中,以提高imageNamed方法獲得相同圖片的image對(duì)象的性能。即使生成的對(duì)象被 autoReleasePool釋放了,這份緩存也不釋放。而且沒(méi)有明確的釋放方法。如果圖像比較大,或者圖像比較多,用這種方式會(huì)消耗很大的內(nèi)存。

第二種方法加載的圖片是不會(huì)緩存的。得到的對(duì)象時(shí)autoRelease的,當(dāng)autoReleasePool釋放時(shí)才釋放。

第三種方法要手動(dòng)release掉。不系統(tǒng)緩存。release后立即釋放,一般用在封面等圖比較大的地方。

參考資料
ios 內(nèi)存使用陷阱 和imageNamed 、imageWithContentsOfFile:
IOS高級(jí)教程1:處理1000張圖片的內(nèi)存優(yōu)化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容