我有一个应用程序,我正在从iOS6更新到iOS8。在这里和那里做了一些小的改动以便编译后,我在我的iPad mini上运行应用程序,发现性能大幅下降。在一些地方,过去没有明显延迟的事情现在经常需要2-3秒才能完成。想到我的iPad可能出了问题,我删除了当前版本并从AppStore重新下载了应用程序。表现又恢复到以前的状态。
在对代码进行分析之后,其中一个突出的事情是[UIImage imageNamed]中的大量时间。我的应用程序对此进行了多次调用,因为它具有室内和室外模式,需要动态加载给定视图上的大多数图像。在最新的SDK中,此调用发生了什么变化?
当我分析应用程序时,这里的方法正在消耗大约70%的时间
+(UIImage*)imageNamed:(NSString*)rootName extension:(NSString*)extension
{
NSString* typeName = _isIndoor ? @"inside" : @"outside";
NSString* fullName = [NSString stringWithFormat:@"%@-%@.%@", rootName, typeName, extension];
UIImage* result = [UIImage imageNamed:fullName];
if (result == nil) {
NSLog(@"Missing image [name: %@]", fullName);
}
return result;
}
其他一些说明:
答案 0 :(得分:1)
我认为[UIImage imageNamed:]占用的时间最多。在我们猜测“搜索”部分出现问题之前,我认为事情进展顺利。资源存储在哪里?主捆或其他地方?
此外,imageNamed:应该缓存图像,快速进行后续调用。是这样的吗?或者对同一资源的后续调用也是如此?
尝试在NSImage上使用带有inBundle参数的init方法,并将正确的bundle传递给它。这样,如果搜索文件是问题,这应该更快。