iOS中根據(jù)本地icon加載出一個UIImage對象有兩種方法:
1. UIImage *img1 = [UIImage imageNamed:@"pic1"];
2. UIImage *img2 = [UIImage imageWithContentsOfFile:filePath];
那么這兩種方式有什么區(qū)別嗎?
這是肯定的:
-
imageNamed方法
- 后面的參數(shù)是icon的名字.圖片可以存在項目中,也可以存在Assets中.
- 這個方法只適合一些中小型的圖片讀取,而一些比較大的資源圖片并不適合用這個方法.
- 此外,這個方法加載完圖片后會存在Cache里面,當(dāng)用這個方法加載的時候,它會在系統(tǒng)緩存中查找并返回一個對象,如果緩存中沒有找到對應(yīng)的對象,這個方法會從指定的文檔中加載,再返回對象.
- 優(yōu)缺點: <優(yōu)點>.當(dāng)你需要在一個TableView里的Cell里都加載同樣一個圖標(biāo)的時候,那么用imageNamed加載圖像效率很高。系統(tǒng)會把那個圖標(biāo)Cache到內(nèi)存,在TableViewCell里每次需要這個圖像的時候,只會把圖片指針指向同一塊內(nèi)存。 <缺點>.由于這個方法會把加載的圖片存入緩存,雖然提高了運行速度,但是非常消耗內(nèi)存,一些圖片只需要加載一次,根本不會再次使用,但是還是會被加載到內(nèi)存中.這樣做非常消耗內(nèi)存,尤其是加載一些大圖的時候.當(dāng)內(nèi)存過大時,會出現(xiàn)內(nèi)存警告,或者內(nèi)存泄漏.雖然現(xiàn)在蘋果手機(jī)內(nèi)存做了提升,但是還是有必要注意的.
-
imageWithContentsOfFile方法
- 后面的參數(shù)是圖片的路徑,格式是字符串
- 這個方法加載圖片時,會根據(jù)路徑查找,直接加載,使用完后釋放,不會存入內(nèi)存.
- 這個方法適合一些不常用的圖片或icon,或者資源比較大圖片.
- 優(yōu)缺點: <優(yōu)點>.可以節(jié)省內(nèi)存 <缺點>.消耗性能.
總結(jié): 一些小的icon可以存在Assets里面.用imageNamed加載. 一些比較大的,使用頻率低的可以建立一個bundle存放圖片,使用imageWithContentsOfFile加載.