IPv*_*Pv6 7 iphone uiimage imagenamed ios5
在新发布的iOS 5.0 SDK上重新编译我们的iPhone应用程序后,我遇到了一个奇怪的问题 - 所有UIImage:imageNamed(第一次调用实际图像加载)和UIImage:imageWithContentsOfFile开始工作比之前慢10倍.我设法缩小问题:这只是jpeg和png文件(不是GIF!)的情况,这不是因为文件大小.即使直接加载小型32*32 png也需要大约300ms ...相比之下老式设备需要30ms(在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!");
Run Code Online (Sandbox Code Playgroud)
没有任何运气......这一行
CIImage* cii = [CIImage imageWithData:imageData];
Run Code Online (Sandbox Code Playgroud)
即使在小图像(4Kb png)上也需要相同的300毫秒.imho,根本没有什么可以解析的!
有没有什么可以解决加载时间这种奇怪的变化?现在它似乎在sdk内部发生了巨大的变化:(
小智 8
我遇到了同样的问题,我花了几个小时才发现出了什么问题.我们的两种情况似乎完全相同:一个在iOS5上运行得不好的旧项目了.
因此,我使用了仪器的Time Profiler并挖掘了我的应用程序的深度,但发现每次应用程序挂起它实际上都是在为UIImageViews打开PNG文件的过程中,就像你发现的那样.但是我写的其他应用程序没有这个问题,我以同样的方式做了一切.因此,根据您的经验以及我的其他应用程序运行良好来判断,我认为它必须与PNG文件本身有关.猜猜看,结果证明我是对的.
所以我坐下来编写了一个脚本,通过ImageMagick的转换来管理所有PNG文件以从中创建TGAs,然后删除PNG(仅用于测量),然后将临时TGA转换回PNG文件.这样我确保它们不仅不再由Photoshop创建,而且还完全重写.
这就是诀窍.现在一切都运行顺畅,就像在iOS 3和4上一样.
我不确定它是否与Photoshop有关.我最近使用Photoshop制作的PNG可以正常使用其他应用程序.所以也许是我在一年前使用的Photoshop版本首先创建了这些PNG.
或者只是简单地覆盖旧的图像文件就足够了,我不确定.但现在它运行得很好.
我希望这有帮助!