我最近在我的应用程序中发现了一个非常大的性能问题,这是由于在[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