objective-c multithreading grand-central-dispatch nsthread

objective c - dispatch_get_main_queue() en el hilo principal



objective-c multithreading (2)

Tengo un método que hace cambios en la interfaz de usuario en algunos casos.

Por ejemplo:

-(void) myMethod { if(someExpressionIsTrue) { // make some UI changes // ... // show actionSheet for example } }

A veces se llama a myMethod desde mainThread veces desde algún other thread .

Es por eso que quiero que estos cambios en la interfaz de usuario se realicen con seguridad en el mainThread .

Cambié parte necesaria de mi myMethod esta manera:

if(someExpressionIsTrue) { dispatch_async(dispatch_get_main_queue(), ^{ // make some UI changes // ... // show actionSheet for example }); }

Así que las preguntas:

  • ¿Es una solución segura y buena llamar a dispatch_async(dispatch_get_main_queue() en el hilo principal ? ¿Influye en el rendimiento?
  • ¿Se puede resolver este problema de la otra manera mejor? Sé que puedo verificar si es un subproceso principal utilizando el [NSThread isMainThread] y llamar a dispatch_async solo en el caso de otro subproceso, pero me hará crear un método o bloque más con estas actualizaciones de la interfaz de usuario.

No hay ningún problema con la adición de un bloque asíncrono en la cola principal desde la cola principal, todo lo que hace es ejecutar el método más adelante en el bucle de ejecución.

Lo que definitivamente no quieres hacer es llamar a dispatch_sync agregando un bloque a la cola principal desde dentro de la cola principal, ya que terminarás encerrándote.


No se preocupe si llama a dispatch_async en el hilo principal o no. iOS pondrá el bloque en una cola y ejecutará el bloque en el hilo principal.