在新发布的iOS 5.0 SDK上重新编译我们的iPhone应用程序后,我遇到了奇怪的问题——所有的UIImage:imageNamed(第一次调用实际图像加载)和UIImage:imageWithContentsOfFile比以前慢10倍。我设法将问题缩小:这仅适用于jpeg和png文件(不是gif!),而且这不是因为文件大小。即使是直接加载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内部发生了巨大的变化:(