iOS中根據(jù)本地icon加載出一個(gè)UIImage對(duì)象有兩種方法:
imageNamed:
UIImage *img = [UIImage imageNamed:@"pic"];
*imageWithContentsOfFile:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"png"];
UIImage *img = [UIImage imageWithContentsOfFile:filePath];
那么這兩種方式有什么區(qū)別嗎?
imageNamed:
方法
- 后面的參數(shù)是
icon
的名字.圖片可以存在項(xiàng)目(bundle
)中,也可以存在Assets
中赃泡。 - 這個(gè)方法只適合一些中小型的圖片讀取,而一些比較大的資源圖片并不適合用這個(gè)方法卢佣。
- 這個(gè)方法加載完圖片后會(huì)存在Cache里面,當(dāng)用這個(gè)方法加載的時(shí)候,它會(huì)在系統(tǒng)緩存中查找并返回一個(gè)對(duì)象,如果緩存中沒有找到對(duì)應(yīng)的對(duì)象,這個(gè)方法會(huì)從指定的文檔中加載,再返回對(duì)象剑肯。
優(yōu)缺點(diǎn)
-
優(yōu)點(diǎn)
當(dāng)你需要在一個(gè)TableView里的Cell里都加載同樣一個(gè)圖標(biāo)的時(shí)候,那么用imageNamed加載圖像效率很高抹估。系統(tǒng)會(huì)把那個(gè)圖標(biāo)Cache到內(nèi)存徐矩,在TableViewCell里每次需要這個(gè)圖像的時(shí)候怯屉,只會(huì)把圖片指針指向同一塊內(nèi)存。 -
缺點(diǎn)
由于這個(gè)方法會(huì)把加載的圖片存入緩存,雖然提高了運(yùn)行速度,但是非常消耗內(nèi)存,一些圖片只需要加載一次,根本不會(huì)再次使用,但是還是會(huì)被加載到內(nèi)存中.這樣做非常消耗內(nèi)存,尤其是加載一些大圖的時(shí)候.當(dāng)內(nèi)存過大時(shí),會(huì)出現(xiàn)內(nèi)存警告,或者內(nèi)存泄漏.雖然現(xiàn)在蘋果手機(jī)內(nèi)存做了提升,但是還是有必要注意的蟆盹。
imageWithContentsOfFile:
方法
- 后面的參數(shù)是圖片的路徑
- 這個(gè)方法加載圖片時(shí),會(huì)根據(jù)路徑查找,直接加載,使用完后釋放,不會(huì)存入內(nèi)存
- 這個(gè)方法適合一些不常用的圖片或icon,或者資源比較大圖片
優(yōu)缺點(diǎn)
-
優(yōu)點(diǎn)
可以節(jié)省內(nèi)存 -
缺點(diǎn)
消耗性能
總結(jié)
: 一些小的icon可以存在Assets里面。用imageNamed:
加載邑滨。一些比較大的,使用頻率低的可以建立一個(gè)bundle
存放圖片,使用imageWithContentsOfFile:
加載日缨。
本文參考iOS中imageNamed與imageWithContentsOfFile的區(qū)別钱反,非常感謝該作者掖看。
- 如有錯(cuò)誤,歡迎指正面哥,多多點(diǎn)贊哎壳,打賞更佳,您的支持是我寫作的動(dòng)力尚卫。