Po prostej rekompilacji naszego iPhone'a na nowo wydanym SDK iOS 5.0 napotkałem dziwny problem - wszystkie UIImage: imageNamed (pierwsze wywołanie z rzeczywistym ładowaniem obrazu) i UIImage: imageWithContentsOfFile zaczęło działać 10 razy wolniej niż wcześniej. udało mi się zawęzić problem: dotyczy to tylko plików jpeg i png (nie gifów!), a to nie z powodu rozmiaru pliku. nawet proste ładowanie małych 32 * 32 png trwa około 300ms ... w porównaniu do 30 ms na starszych urządzeniach (sprawdzone w wersji 3.1 i 4.3.5 z tym samym kodem)UIImage: imageWithContentsOfFile jest 10 razy wolniejsze w iOS 5.0
Próbowałem również załadować obraz przez nowo wprowadzony CIImage z ten kod
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!");
bez powodzenia ... to pojedyncza linia
CIImage* cii = [CIImage imageWithData:imageData];
wykonuje te same 300ms nawet na małych obrazów (4KB pNG). imho, nie ma nic prostego do parsowania!
Czy jest coś, co rozwiąże tak dziwne zmiany czasu ładowania? Na razie wygląda na to, że coś zmieniło się drastycznie w wewnętrznych urządzeniach sdk :(
dziękuję, na pewno spróbuję i opublikuję tutaj, jeśli to pomoże. w każdym razie wydaje mi się, że to błąd (rzeczy nie lepsze z nowym wydaniem 5.0.1) i wkrótce zgłoszę je Apple wkrótce – IPv6
Czy próbowałeś już tego?Czy to też działa z tobą? - Zrobiłem jeszcze kilka testów, które potwierdziły, że miało to związek z odczytaniem PNG z dysku. Rzeczywiście, sądząc po innym śladzie Time Profiler, który zrobiłem największą część czasu, tracę przez iOS5 podczas tworzenia klasy metadanych dla odczytanego PNG. – Martin
fantastyczne! Tak, to bardzo pomaga, dzięki! i masz rację - wydaje się, że za te crazyny odpowiadają zarówno metadane (zarówno dla jpeg, jak i png). po ponownym zapisaniu wszystkich pngs i jpegów bez włączonych metadanych wszystko zaczęło działać jak zwykle - obrazy ładują się w 30 ms. Wygląda na to, że pakiety SDK w wersji wcześniejszej niż 5.0 iOS po prostu zignorowały wszystkie metadane png/jpeg. – IPv6