- imageNamed,其參數(shù)為圖片的名字哎迄。
這個(gè)方法用一個(gè)指定的名字在系統(tǒng)緩存中查找并返回一個(gè)圖片對(duì)象如果它存在的話弛槐。如果緩存中沒有找到相應(yīng)的圖片关噪,這個(gè)方法從指定的文檔中加載然后緩存并返回這個(gè)對(duì)象衔憨。因此imageNamed的優(yōu)點(diǎn)是當(dāng)加載時(shí)會(huì)緩存圖片严卖。所以當(dāng)圖片會(huì)頻繁的使用時(shí),那么用imageNamed的方法會(huì)比較好梢什。
- 例如:你需要在 一個(gè)TableView里的TableViewCell里都加載同樣一個(gè)圖標(biāo),那么用imageNamed加載圖像效率很高朝聋。系統(tǒng)會(huì)把那個(gè)圖標(biāo)Cache到內(nèi)存嗡午,在TableViewCell里每次利用那個(gè)圖 像的時(shí)候,只會(huì)把圖片指針指向同一塊內(nèi)存冀痕。正是因此使用imageNamed會(huì)緩存圖片荔睹,即將圖片的數(shù)據(jù)放在內(nèi)存中狸演,iOS的內(nèi)存非常珍貴并且在內(nèi)存消耗過大時(shí),會(huì)強(qiáng)制釋放內(nèi)存僻他,即會(huì)遇到memory warnings宵距。而在iOS系統(tǒng)里面釋放圖像的內(nèi)存是一件比較麻煩的事情,有可能會(huì)造成內(nèi)存泄漏吨拗。
- 例如:當(dāng)一 個(gè)UIView對(duì)象的animationImages是一個(gè)裝有UIImage對(duì)象動(dòng)態(tài)數(shù)組NSMutableArray满哪,并進(jìn)行逐幀動(dòng)畫。當(dāng)使用imageNamed的方式加載圖像到一個(gè)動(dòng)態(tài)數(shù)組NSMutableArray劝篷,這將會(huì)很有可能造成內(nèi)存泄露哨鸭。原因很顯然的。
- imageWithContentsOfFile娇妓,其參數(shù)也是圖片文件的路徑像鸡。
僅加載圖片,圖像數(shù)據(jù)不會(huì)緩存哈恰。因此對(duì)于較大的圖片以及使用情況較少時(shí)只估,那就可以用該方法,降低內(nèi)存消耗着绷。
獲取圖片
NSString *path = [[NSBuddle mainBuddle] pathForResource:@"resourceName" oftype@"resourceType"];
UIImage *image = [[UIImage imageWithContentsOfFile:path];
UIImage *image = [UIImage imageNamed:@"imageName"];
以及
NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:“png”];
NSData *image = [NSData dataWithContentsOfFile:filePath];
UIImage *image = [UIImage imageWithData:image];
//or = [UIImage imageWithContentsOfFile:filePath];