¿Qué tan importante es usar `performSelectorOnMainThread: withObject: waitUntilDone:` From an NSOperation?

Mi aplicación de iPad se sincroniza con una fuente XML, ejecutando la sincronización en una subclase de NSOperation ejecutada desde un NSOperationQueue. A medida que analiza el feed, vuelve a llamar al hilo principal a través deperformSelectorOnMainThread:withObject:waitUntilDone: actualizar varias partes de la interfaz de usuario, programar descargas, etc. Algo de esto es bastante costoso; la interfaz de usuario a veces puede dejar de responder durante un segundo o dos a medida que se realiza una sincronización.

Para que la interfaz de usuario sea más receptiva, eliminé el uso deperformSelectorOnMainThread:withObject:waitUntilDone: a favor de las llamadas directas para realizar todas las tareas relacionadas con la sincronización, incluida la actualización de la interfaz de usuario. Así que ahora la sincronización se realiza completamente en el hilo de fondo creado por NSOperationQueue. Esto parece funcionar bastante bien, y la interfaz de usuario es mucho más receptiva durante una sincronización.

Sin embargo, desconfío de lanzarlo de esta manera. He visto algunas menciones en varios lugares que solo se debe actualizar la interfaz de usuario en el hilo principal (ejemplo con referencia a AppKit) Pero no he podido encontrar nada específico sobre este tema en la documentación.

Entonces, ¿qué tan importante es actualizar la interfaz de usuario en el hilo principal? ¿Qué partes de una aplicación son seguras para subprocesos y cuáles no? ¿Existe quizás una referencia que explique qué es seguro ejecutar en una operación NSO y qué debe ejecutarse solo en el hilo principal en iOS? ¿Realmente estoy haciendo algo inseguro o propenso a los choques?

Respuestas a la pregunta(4)

Su respuesta a la pregunta