Недавно я обнаружил довольно серьезную проблему с производительностью в своем приложении, которая была из-за того, что изображение не было найдено в [UIImage imagenamed:].UIImage imageNamed extension
Мне было интересно, есть ли «drop-in» решение, чтобы каким-то образом зарегистрировались такие «ошибки»? Я начал писать расширения к классу 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: имя], конечно, вызывает метод расширения, чтобы называться снова ...
Любые предложения?
благодаря Томас
Вы получили пару приличных ответы ниже улавливать эти виды ошибок (я рекомендую swizzling реализации BTW), но я здесь, чтобы благовествовать НЕ использовать 'imageNamed:'. Он кэширует и никогда не очищает каждое загружаемое изображение, поэтому, если вы загружаете много изображений, вы быстро будете записывать память. Вы можете совать здесь на StackOverflow для альтернативных схем кэширования. – AndrewS
@AndrewS: в то время как 'imageNamed:' делает кеш (что во многих случаях является увеличением производительности), он также * делает * очищает изображения из памяти, когда приложение получает предупреждение о памяти. См. Например, WWDC 2011 Session 318. В предыдущей версии iOS произошла ошибка, которая помешала этому, но она долго исправлена. – DarkDust