概述:
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 時就會被釋放。