3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
這取決于您對圖像的處理方式。該imageNamed:
方法確實(shí)緩存了圖像,但是在許多情況下將有助于內(nèi)存使用。例如,如果您加載一張圖像10次以在表視圖中與某些文本一起顯示,則UIImage將僅在內(nèi)存中保留該圖像的單個(gè)表示,而不分配10個(gè)單獨(dú)的對象。另一方面,如果圖像很大,并且您不打算重新使用它,則可能要從數(shù)據(jù)對象加載圖像,以確保完成后從內(nèi)存中將其刪除。
如果您沒有任何大圖像,那我就不用擔(dān)心。除非您遇到問題(并且為了檢查對象分配而不是先發(fā)制人地優(yōu)化),否則我會(huì)選擇較少的代碼行,而忽略可以忽略的內(nèi)存改進(jìn)。

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
正如UIImage的API參考所說:
+(UIImage *)imageNamed:(NSString *)name
此方法在系統(tǒng)緩存中查找具有指定名稱的圖像對象,并返回該對象(如果存在)。如果緩存中還沒有匹配的圖像對象,則此方法從指定的文件加載圖像數(shù)據(jù),將其緩存,然后返回結(jié)果對象。
+(UIImage *)imageWithContentsOfFile:(NSString *)路徑
此方法不緩存圖像對象。
因此,我們可以看到,如果您有很多相同的UI元素(例如UITableViewCell)可能使用相同的圖像(通常作為圖標(biāo)使用),并且由于性能原因,我們當(dāng)然想重用同一圖像,這樣我們將為其他用途節(jié)省一些內(nèi)存。通常,重用的圖像通常在ui元素中使用,我們的用戶可能會(huì)對其進(jìn)行很多次操作。因此它對于我們重用它很有價(jià)值。因此,您可以選擇使用imageNamed方法。
另一方面,在應(yīng)用程序中,在應(yīng)用程序的生命周期中將存在一些UI元素,例如Button,徽標(biāo)視圖,因此這些ui元素使用的這些圖像也可能在應(yīng)用程序的過程中存在。在生命周期中,您無需考慮是否應(yīng)緩存這些圖像。因此,您可以選擇使用imageNamed方法。
相反,在應(yīng)用程序中,通常會(huì)動(dòng)態(tài)創(chuàng)建一些UI元素。例如,我們的應(yīng)用程序支持動(dòng)態(tài)背景,以便用戶可以選擇自己喜歡的背景。并且背景可以是圖像。因此,我們可能有一個(gè)界面,其中列出了許多不同的背景(通常使用UIImageView進(jìn)行顯示)供用戶選擇,我們可以將列表視圖命名為MyBackgroundListView。因此,一旦用戶選擇了背景圖片,則MyBackgroundListView應(yīng)該被銷毀,因?yàn)樗淹瓿善涔δ堋O麓斡脩粝胍钠浔尘皶r(shí),我們可以創(chuàng)建再次使用MyBackgroundListView。因此,不應(yīng)緩存MyBackgroundListView使用的圖像,否則我們的應(yīng)用程序的內(nèi)存將用完。因此,這一次您應(yīng)該使用 imageWithContentsOfFile方法。
正如蘋果公司支持Views中高分辨率屏幕的文檔所說
在具有高分辨率屏幕的設(shè)備上,imageNamed:,imageWithContentsOfFile:和initWithContentsOfFile:方法會(huì)自動(dòng)在名稱中使用@ 2x修飾符查找所請求圖像的版本。如果找到一個(gè),它將加載該圖像。如果不提供給定圖像的高分辨率版本,則該圖像對象仍會(huì)加載標(biāo)準(zhǔn)分辨率的圖像(如果存在)并在繪制過程中對其進(jìn)行縮放。
因此您會(huì)擔(dān)心圖像的搜索路徑是否存在視網(wǎng)膜屏幕問題。IOS將幫助您處理它。
對不起,我英語不好??赡軙?huì)有所幫助。

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
如果您不希望圖像被緩存,也可以直接使用initWithContentsOfFile:
NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
UIImage* yourImage = [[[UIImage alloc] initWithContentsOfFile:imagePath] autorelease];
- 3 回答
- 0 關(guān)注
- 733 瀏覽
添加回答
舉報(bào)