Después de simplemente recompilar nuestra aplicación de iPhone en iOS 5.0 SDK recientemente lanzado me enfrenté a un problema extraño - todos UIImage: imageNamed (primera llamada con carga de imagen real) y UIImage: imageWithContentsOfFile comenzó a funcionar 10 tiempos más lento que antes. Logré reducir el problema: este es el caso solo para archivos jpeg y png (¡no gif!) y esto no se debe al tamaño del archivo. incluso la carga directa de 32 * 32 png pequeños toma alrededor de 300ms ... comparado con 30ms en dispositivos más antiguos (revisado en 3.1 y 4.3.5 con el mismo código exacto)UIImage: imageWithContentsOfFile es 10 veces más lento en iOS 5.0
También traté de cargar imágenes a través de CIImage recientemente introducido con este código
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!");
sin ninguna suerte ... esta sola línea
CIImage* cii = [CIImage imageWithData:imageData];
toma los mismos 300ms incluso en pequeñas imágenes (4 Kb PNG). ¡Enhorabuena, no hay nada fácil de analizar en absoluto!
¿Hay algo para resolver un cambio tan extraño en los tiempos de carga? Por ahora parece que algo cambió drásticamente en sdk internals :(
gracias, definitivamente intentarlo y publicar aquí si ayuda. de todos modos parece un error para mí (las cosas no son mejores con el recién lanzado 5.0.1) y lo archivaré a Apple pronto – IPv6
Entonces, ¿ya lo has probado?¿Funcionó con usted también? - Hice algunas pruebas más que confirmaron que tenía que ver con leer el PNG desde el disco. De hecho, a juzgar por otra huella de Time Profiler que hice, se pierde la mayor parte del tiempo en iOS5 al crear la clase de metadatos para el PNG que se lee. – Martin
¡fantástico! Sí, esto ayuda mucho, ¡gracias! y tienes razón, parece que los metadatos son los responsables de estas locuras (tanto para jpeg como para png). después de volver a guardar todos los archivos png y jpegs sin metadatos habilitados, todos comenzaron a funcionar como siempre: las imágenes se cargan en 30 ms. parece que los SDK pre-5.0 ios olvidaron cualquier metadato png/jpeg. – IPv6