2011-08-18 7 views

Respuesta

4

Si escribe el código UIViewController normal, no necesita preocuparse por la seguridad de los hilos en iOS. En iOS, cualquier mensaje sobre la IU debería ejecutarse en el hilo principal.

Si no realiza un mensaje de fondo solo, normalmente no tiene que preocuparse por el hilo, en la mayoría de las situaciones, siempre estará en el hilo principal.

P.S. Algunos Frameworks como Game Kit algunas veces interpretarán mensajes en segundo plano, pero no se trata de UI y el documento de Apple le advertirá que se asegure de que el mensaje se ejecute en el hilo principal.

+0

Algunos códigos de dibujo tienen múltiples subprocesos, como CATiledLayer cuando se ejecuta en una CPU multinúcleo. –

9

El concurrency programming guide es bueno. Aquí hay algunas cosas muy importantes para tener en cuenta.

- Solo debe actualizar la IU desde el hilo principal. Esto puede atraparlo de maneras sutiles ...

- NSSe recibirán notificaciones en la secuencia desde la que se activan. Por lo tanto, si inicia un hilo y se suscribe a NSNotification para activar una acción UI, debe verificar en qué hilo se encuentra cuando lo obtiene. Si no está en el hilo principal, use el elemento de NSObject performSelectorOnMainThread: withObject: waitUntilDone: para ponerlo en el hilo principal.

- Si está haciendo un dibujo en un contexto no relacionado con la interfaz de usuario, creo que los gráficos centrales ya no tienen subprocesos. (Creo que CATiledLayer hace algunas cosas inteligentes por esto)

- Generalmente para los controladores de vista, el único bucle de evento que debe pensar es el del hilo principal. Piense dos veces antes de hacer su propio ciclo de eventos en otro hilo.

+0

Solo para confirmar, Core Graphics es seguro para subprocesos y CATiledLayer hace todo lo que dibuja en varios subprocesos de fondo (solo un subproceso de fondo si tiene una CPU de núcleo único). –

Cuestiones relacionadas