UIGraphicsBeginImageContextWithOptions y Multithreading

Estoy un poco confundido acerca de UIGraphicsBeginImageContextWithOptions y subprocesss porque de acuerdo con la Referencia de funciones de UIGraphicsBeginImageContextWithOptions , UIGraphicsBeginImageContextWithOptions debería llamarse solo en el subprocess principal. Cuando se llama crea un context basado en bitmap, que está listo para ser manipulado con las funciones de drawInRect: o con methods como – drawInRect: para UIImage , -drawInRect:withFont: para NSString etc. Para el dibujo de CoreGraphics, todo está claro: se pasa un argumento CGContextRef que se está manipulando para cada function, pero los methods de dibujo UIKit utilizan el context actual en la stack. En las notas de la versión de What's New en iOS 4.0 está escrito que

Dibujar a un context de charts en UIKit ahora es seguro para subprocesss. Específicamente:
– Las rutinas utilizadas para acceder y manipular los charts.
el context ahora puede manejar correctamente los contexts que residen en diferentes subprocesss.
– La secuencia y el dibujo de la image ahora son seguros para subprocesss.
– Ahora es seguro hacer uso de objects de color y fuente en múltiples subprocesss.

Hasta aquí todo bien. La parte interesante es que tengo un proyecto, en el que hago dibujos intensivos y creo múltiples imágenes creando context con UIGraphicsBeginImageContextWithOptions , pero cuando estas operaciones UIGraphicsBeginImageContextWithOptions más time y simplemente moví el dibujo en un hilo de background y cuando estaba listo mostrarlos en la pantalla con algunas animaciones y todo funciona bien, sin lockings, sin fugas. Las imágenes dibujan como se espera y parece que UIGraphicsBeginImageContextWithOptions crea un context para el hilo de background y todo parece estar bien.
Entonces mis preguntas son:
– ¿Por qué es necesario llamar a UIGraphicsBeginImageContextWithOptions solo en el hilo principal, ya que parece que funciona bien en segundo plano?
– ¿Cómo utilizar el método -drawInRect: UIImage , por ejemplo, en un hilo de background, donde no tengo un context actual y no puedo crearlo porque no puedo llamar a UIGraphicsBeginImageContextWithOptions allí?
– ¿Cuál es el enfoque correcto para la manipulación de imágenes de background usando los methods de UIKit (sé que también puedo usar CGBitmapContextCreate , pero no empuja el context creado en la stack de context ni parece ser capaz de hacerlo yo mismo para usar -drawInRect: método de UIImage )?

Entonces, después de un par de días de investigación, ¿cómo es que manipular el context UIKit es seguro para subprocesss y, sin embargo, no parece ser capaz de crear uno en un subprocess que no sea el principal porque UIGraphicsBeginImageContextWithOptions "debería llamarse solo en el principal hilo ", pero aún así funciona perfectamente y después de leer algunas publicaciones pequeñas sobre el tema y discutirlo con otros chicos en los foros de desarrolladores de Apple, puedo decir claramente que lo dicho en la documentation sobre UIGraphicsBeginImageContextWithOptions , UIGraphicsPushContext y UIGraphicsPopContext es UIGraphicsPopContext y esos los methods podrían llamarse y el context utilizado en otro subprocess sin problemas. Así UIGraphicsBeginImageContextWithOptions , UIGraphicsPushContext y UIGraphicsPopContext son subprocesss seguros .

Respuesta parcial: utilice UIGraphicsPushContext para insert su propio context CG en la parte superior de la stack "context UIKit" y todo (desde ese hilo, tal como interpreto la documentation de Apple) pintará eso. No olvide utilizar UIGraphicsPopContext para UIGraphicsPopContext desde la stack de context de UIKit.

Esto se aplica a todas las operaciones de dibujo de UIKit; por ejemplo, dibujando UIImage s, como has preguntado. Empuje un context, dibuje, luego haga estallar el context.