在iOS開發(fā)中生成一個(gè)UIImage對(duì)象的方法通常有兩種
1.利用imageNamed方法
2.使用imageWithContentsOfFile
下面介紹這兩中方法的區(qū)別:
imgeNamed
[UIImage imageNamed:@"hearderImage"]
使用這個(gè)方法生成的UIImage對(duì)象,會(huì)在應(yīng)用的bundle中尋找圖片,如果找到則Cache到系統(tǒng)緩存中,作為內(nèi)存的cache.
而程序員是無法操作cache的,只能由系統(tǒng)自動(dòng)處理,如果我們需要重復(fù)加載一張圖片,那這無疑是一種很好的方式,因?yàn)橄到y(tǒng)能很快的從內(nèi)存的cache找到這張圖片.
但是試想,如果加載很多很大的圖片的時(shí)候,內(nèi)存消耗過大的時(shí)候,就會(huì)會(huì)強(qiáng)制釋放內(nèi)存淮野,即會(huì)遇到內(nèi)存警告(memory warnings).由于在iOS系統(tǒng)中釋放圖片的內(nèi)存比較麻煩,所以沖易產(chǎn)生內(nèi)存泄露
小結(jié)
imageNamed只適合用于小的圖片的讀取樟插,或重復(fù)使用一張圖片的時(shí)候,而當(dāng)加載一些比較大的圖片文件的時(shí)候我們應(yīng)當(dāng)盡量避免使用這個(gè)方法.
imageWithContentsOfFile
NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
相比上面的imageNamed這個(gè)方法要寫的代碼多了幾行,使用imageWithContentsOfFile的方式加載的圖片屠尊,圖片會(huì)被系統(tǒng)以數(shù)據(jù)的方式進(jìn)行加載.返回的對(duì)象不會(huì)保存在緩存中抖韩,一旦對(duì)象銷毀就會(huì)釋放內(nèi)存,所以一般不會(huì)因?yàn)榧虞d圖片的方法遇到內(nèi)存問題.
小結(jié)
當(dāng)有些圖片在應(yīng)用中只使用比較少的次數(shù)的昆箕,就可以用這樣的方式晰韵,相比imageNamed會(huì)降低內(nèi)存消耗,避免一些內(nèi)存問題.
Last
總的來說,寫出更好的代碼,我們需要權(quán)衡代碼中所遇到的情況,根據(jù)情況選擇更好的方法.