ios - ¿Los eventos NSNotificationCenter se reciben de forma síncrona o asíncrona?
(1)
Si una clase se registra para eventos NSNotificationCenter
de un cierto tipo y otra clase publica un evento de ese tipo, ¿el código en el receptor se ejecutará antes (sincrónicamente) o después (asincrónicamente) de que continúe la clase contable?
- (void)poster {
[[NSNotificationCenter defaultCenter]
postNotificationWithName:@"myevent"
object:nil];
NSLog(@"Hello from poster");
}
- (void)receiver {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector:(mySelector)
name:@"myevent"
object:nil];
}
- (void) mySelector:(NSNotification *) notification {
NSLog(@"Hello from receiver");
}
En el ejemplo de código anterior, ¿se imprimirá "Hello from receiver" antes o después de "Hello from caller"?
Como se indica en la documentación de NSNotificationCenter NSNotificationCenter, las notificaciones de referencia de clase se publican de forma síncrona.
Un centro de notificaciones entrega notificaciones a los observadores sincrónicamente. En otras palabras, los métodos postNotification: no regresan hasta que todos los observadores hayan recibido y procesado la notificación. Para enviar notificaciones de forma asincrónica, use NSNotificationQueue .
En una aplicación multiproceso, las notificaciones siempre se entregan en el hilo en el que se envió la notificación, que puede no ser el mismo hilo en el que se registró un observador.
Espero que te ayude