在新發布的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