UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"xx.jpg"]
UIImage *img = [UIImage imageNamed:@"xx.jpg"]
在第二種類型中圖像會被緩存嗎?
而在第一種類型的圖像不會被緩存?是否UIImage緩存圖像?
UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"xx.jpg"]
UIImage *img = [UIImage imageNamed:@"xx.jpg"]
在第二種類型中圖像會被緩存嗎?
而在第一種類型的圖像不會被緩存?是否UIImage緩存圖像?
-initWithContentsOfFile:
創建一個沒有緩存的新圖像,這是一個普通的初始化方法。
+imageNamed:
方法使用緩存。這裏是從UIImage Reference的文檔:
此方法在系統緩存中查找具有指定名稱的圖像對象,並返回該對象(如果存在)。如果匹配的圖像對象不在緩存中,則此方法從指定的文件加載圖像數據,將其緩存,然後返回結果對象。
UIImage將保留已加載的映像,使其保持活動狀態,直到內存不足情況導致緩存被清除。
更新夫特: 在夫特的UIImage(named: "...")
功能是緩存的圖像之一。
正確,第二項被緩存。
只是想離開這裏來幫助處理路徑名問題。這是一種可以放在UIImage
類別上的方法。
+(UIImage *)imageNamed:(NSString *)name cache:(BOOL)cache {
if (cache)
return [UIImage imageNamed:name];
name = [[NSBundle mainBundle] pathForResource:[name stringByDeletingPathExtension] ofType:[name pathExtension]];
UIImage *retVal = [[UIImage alloc] initWithContentsOfFile:name];
return retVal;
}
如果您沒有簡單的方法切換到緩存,最終可能會使用`imageNamed。在大多數情況下這是一個很大的錯誤。請參閱this great answer for more details(並提出問題和答案!)。
如果你希望這不會中斷,如果有多個句點,你可以使用'newName = [[NSBundle mainBundle] pathForResource:[name stringByDeletingPathExtension ] ofType:[name pathExtension]];'和'UIImage * retVal = [[UIImage alloc] initWithContentsOfFile:newName];' – lnafziger 2012-12-25 17:23:12
謝謝,很棒! – 2012-12-25 17:42:27
注意:如果bundle中只包含* 2x @版本的圖像,則會因爲pathForResource不會檢查@ 2x而中斷。否則,很好的解決方案 – Joel 2014-09-08 17:05:30
@丹Rosenstark答案迅速..
extension UIImage {
static func imageNamed(name: String, cache: Bool) -> UIImage? {
if (cache) {
return UIImage(named: name)
}
// Using NSString for stringByDeletingPathExtension
let fullName = NSString(string: name)
let fileName = fullName.stringByDeletingPathExtension
let ext = fullName.pathExtension
let resourcePath = NSBundle.mainBundle().pathForResource(fileName, ofType: ext)
if let path = resourcePath {
return UIImage(contentsOfFile: path)
}
return nil
}
}
謝謝你的吶喊! – 2016-09-19 18:27:50
將高速緩存使用導致了額外的資源還是會只是一個指針,它指向的對象? – raghul 2011-12-27 13:17:51
@raghul UIImage將保留您現有的圖像,並在釋放它之後保持活動狀態,直到內存不足情況導致高速緩存被清除。 – iHunter 2011-12-27 13:29:50
謝謝ihunter !!! – raghul 2011-12-27 13:33:11