在新发布的 iOS 5.0 SDK 上简单地重新编译我们的 iPhone 应用程序后,我遇到了奇怪的问题 - 所有 UIImage:imageNamed (第一次调用实际图像加载)和 UIImage:imageWithContentsOfFile 开始工作比以前慢 10 倍。我设法缩小问题范围:这仅适用于 jpeg 和 png 文件(不是 gifs!),这不是因为文件大小。即使是直接加载小型 32*32 png 也需要大约 300 毫秒...与旧设备上的 30 毫秒相比(使用完全相同的代码在 3.1 和 4.3.5 上进行检查)
我还尝试使用此代码通过新引入的 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 内部发生了巨大的变化:(