imageNamed與imageWithContentsOfFile的區(qū)別

概述:

imageNamed:?這個方法用一個指定的名字在系統(tǒng)緩存中查找并返回一個圖片對象如果它存在的話。如果緩存中沒有找到相應(yīng)的圖片,這個方法從指定的文檔中加載然后緩存并返回這個對象。因此imageNamed的優(yōu)點是當(dāng)加載時會緩存圖片。所以當(dāng)圖片會頻繁的使用時,那么用imageNamed的方法會比較好。例如:你需要在?一個TableView里的TableViewCell里都加載同樣一個圖標(biāo),那么用imageNamed加載圖像效率很高。系統(tǒng)會把那個圖標(biāo)Cache到內(nèi)存,在TableViewCell里每次利用那個圖像的時候,只會把圖片指針指向同一塊內(nèi)存。正是因此使用imageNamed會緩存圖片,即將圖片的數(shù)據(jù)放在內(nèi)存中,iOS的內(nèi)存非常珍貴并且在內(nèi)存消耗過大時,會強制釋放內(nèi)存,即會遇到memory?warnings。而在iOS系統(tǒng)里面釋放圖像的內(nèi)存是一件比較麻煩的事情,有可能會造成內(nèi)存泄漏。例如:當(dāng)一個UIView對象的animationImages是一個裝有UIImage對象動態(tài)數(shù)組NSMutableArray,并進(jìn)行逐幀動畫。當(dāng)使用imageNamed的方式加載圖像到一個動態(tài)數(shù)組NSMutableArray,這將會很有可能造成內(nèi)存泄露。原因很顯然的。

imageWithContentsOfFile:僅加載圖片,圖像數(shù)據(jù)不會緩存。因此對于較大的圖片以及使用情況較少時,那就可以用該方法,降低內(nèi)存消耗。

imageNamed:先將圖片緩存到內(nèi)存中,然后在顯示。

總得來說,使用大的圖片,如果不是常用,那么用 imagewithcontentsoffile 方法,比較小的(比如圖標(biāo)),需要經(jīng)常使用的,那么用后者,imageNamed 加載,內(nèi)存常駐,效率高,但是會放在內(nèi)存里作為cache,圖片多了容易導(dǎo)致crash。

總結(jié):

imageNamed和imageWithContentsOfFile 都是 把 圖片 從 固化存儲文件 讀取到 內(nèi)存中 ,不過 ,imageNamed 讀取后會 把這個圖片 永久 緩存到內(nèi)存中 , 而 imageWithContentsOfFile 卻不會 ,imageWithContentsOfFile 生成的對象 在 引用計數(shù)為0 時就會被釋放。

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

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

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