在新发布的iOS 5.0 SDK中简单地重新编译我们的iPhone应用程序后,我遇到了奇怪的问题 - 所有UIImage:imageNamed(首次调用带有实际图像加载)和UIImage:imageWithContentsOfFile开始工作10比以前慢了很多倍。我设法缩小了问题:只有jpeg和png文件(不是gifs!)才是这种情况,这不是因为文件大小。甚至直接加载小32 * 32 PNG大约需要300毫秒......相比之下,旧设备上的30毫秒(使用完全相同的代码在3.1和4.3.5上进行检查)UIImage:imageWithContentsOfFile在iOS 5.0中慢了10倍
我还尝试通过新引入的CIImage加载图像,这个代码
WLLog(@"Data loading...");
NSData *imageData = [NSData dataWithContentsOfFile:path];
WLLog(@"CIImage creation...");
CIImage* cii = [CIImage imageWithData:imageData];
WLLog(@"CIImage creation ok...");
float scle = 1.0;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
scle = [[UIScreen mainScreen] scale];
}
#endif
CIContext *context = [CIContext contextWithOptions:nil];
UIImage* res5 = [[UIImage alloc] init];
WLLog(@"UIImage creation...");
[res5 initWithCGImage:[context createCGImage:cii fromRect:cii.extent] scale:scle orientation:UIImageOrientationUp];
WLLog(@"Done!");
没有任何的运气......这一条线上
CIImage* cii = [CIImage imageWithData:imageData];
需要即使在小图片(4KB PNG)相同的300毫秒。恕我直言,根本没有什么可以解析的!
有什么可以解决加载时间这样奇怪的变化?现在看起来在sdk内部有些变化很大:(
谢谢,我一定会试一试,并在这里发帖,如果有帮助。无论如何,似乎是一个错误对我来说(事情不是最好的新发布的5.0.1),我会立即将它提交给苹果 – IPv6
所以,你试过了吗?它也与你一起工作吗? - 我做了更多的测试,证实它与从磁盘读取PNG有关。实际上,通过另一个Time Profiler跟踪来判断,我创建了读取的PNG的元数据类时,iOS5已经失去了最大的时间。 – Martin
太棒了!是的,这有助于很多,谢谢!并且你是对的 - 似乎元数据负责这个crazines(包括jpeg和png)。在没有启用元数据的情况下重新保存所有png和jpeg后,所有图片开始像往常一样工作 - 图像以30ms加载。似乎像5.0之前版本的ios SDKs忽略了任何png/jpeg元数据 – IPv6