Escribir UIImage para archivar bloquea IU incluso en el hilo de background

Estoy usando el siguiente código para save algunas imágenes y estoy ejecutando esto en un hilo de background usando:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^ { [NSKeyedArchiver archiveRootObject:array_of_objects_implementing_NSCoding toFile:myFile]; }); 

Tengo objects que implementan el protocolo NSCoding en la matriz, y cada uno de esos objects tiene una matriz con una image asociada a ella. Cada vez que llamo a esto, sin embargo, cuando la image es lo suficientemente grande (algo tomado de la galería de fotos), la interfaz de usuario se congela. Aquí está el código para save la image:

 - (void)encodeWithCoder:(NSCoder *)encoder { NSLog(@"Beginning encoding."); NSData* imageData = UIImagePNGRepresentation(self.image); [encoder encodeObject:imageData forKey@"image"]; NSLog(@"Encoding completed."); } 

Hice un perfil del uso de la CPU de aplicaciones a través de la ejecución y mientras la interfaz de usuario se está congelando, el uso de la CPU aumenta al 100%, y el 85% se dirige a la línea usando "UIImagePNGRepresentation". Además, cuando se llama esto, "Inicio de encoding". se imprime en la console pero "Codificación completada". nunca lo es

¿Por qué está bloqueando la interfaz de usuario, incluso si está en un hilo de background?

No debe usar UIImagePNGRepresentation desde un hilo de background. Apple ha hecho algunos de los subprocesss UIKit seguros, pero no todos. Pruebe usar las llamadas CGImage o ImageIO en su lugar.