我最近在我的應用程序中發現了一個非常大的性能問題,這是由於在[UIImage imagenamed:]中找不到圖像。UIImage imageNamed擴展
我想知道是否有一種「插入」的解決方案,以某種方式記錄這種'錯誤'?我開始寫一個擴展的UIImage類,像這樣:
@implementation UIImage (Debug)
#ifdef DEBUG
+ (UIImage*) imageNamed:(NSString*) name{
UIImage* img = [UIImage imageNamed:name];
if(!img){
NSLog(@"Error: referencing non-exiting image: %@", name);
}
return img;
}
#endif
@end
但是,這會導致一個無限循環,因爲[UIImage的imageNamed:名字]當然會使擴展方法再次調用...
有什麼建議嗎?
感謝 托馬斯
你有以下幾個像樣的答案,對捕捉這些類型的錯誤(我建議BTW混寫的實現),但我在這裏傳福音不使用'imageNamed:'。它緩存並永遠不會清除您加載的每個圖像,因此如果您加載大量圖像,那麼您將很快通過內存燒錄。你可以在StackOverflow上找到替代緩存方案。 – AndrewS
@AndrewS:雖然'imageNamed:'緩存(這在很多情況下是一個性能增益),但它也會*在應用程序收到內存警告時清除內存中的圖像。請參閱WWDC 2011 Session 318.早期的iOS版本中存在一個阻止此操作的錯誤,但它很長時間沒有修復。 – DarkDust