ios - Publicación de NSNotification en el hilo principal
objective-c cocoa (4)
Encontré el siguiente fragmento de código que permite NSNotification
en el hilo principal desde cualquier hilo de fondo. Me gustaría saber si esta es una práctica segura y aceptable, por favor.
dispatch_async(dispatch_get_main_queue(),^{
[[NSNotificationCenter defaultCenter] postNotificationName:@"ImageRetrieved"
object:nil
userInfo:imageDict];
});
Sí
Esto es: estás ingresando al hilo principal y publicando tu notificación. No puede ser más seguro que eso.
En algún lugar a lo largo de la línea esto se hizo posible con:
addObserver(forName:object:queue:using:)
que está here , pero el punto es el objeto queue
.
La cola de operación a qué bloque debe agregarse. Si pasa
nil
, el bloque se ejecuta sincrónicamente en el hilo de publicación.
Entonces, ¿cómo se obtiene la cola que corresponde al runloop principal?
let mainQueue = OperationQueue.main
Nota: esto es cuando te estás suscribiendo a las notificaciones, entonces lo haces una vez y listo. Hacerlo en cada llamada es terriblemente redundante.
SÍ
Sintaxis de Swift 2
dispatch_async(dispatch_get_main_queue()) {
NSNotificationCenter.defaultCenter().postNotificationName("updateSpinner", object: nil, userInfo: ["percent":15])
}
Sintaxis de Swift 3
DispatchQueue.main.async {
NotificationCenter.default.post(name: "updateSpinner", object: nil, userInfo: ["percent":15])
}
Sí puedes .
En general, desea que las NSNotifications se envíen en la página principal, especialmente si desencadenan actividades de IU como descartar un cuadro de diálogo de inicio de sesión modal.
Entrega de notificaciones a hilos particulares
Los centros de notificación regulares entregan notificaciones en el hilo en el que se publicó la notificación. Los centros de notificación distribuidos entregan notificaciones en el hilo principal. A veces, puede requerir que las notificaciones se entreguen en un hilo determinado que usted determine en lugar del centro de notificaciones. Por ejemplo, si un objeto que se ejecuta en un hilo de fondo está escuchando notificaciones de la interfaz de usuario, como el cierre de una ventana, le gustaría recibir las notificaciones en el hilo de fondo en lugar del hilo principal. En estos casos, debe capturar las notificaciones a medida que se entregan en el hilo predeterminado y redirigirlas al hilo apropiado.