En realidad hay un gottcha; ¡te estrellarás al azar! Esa ha sido mi experiencia. Esto tiene que ver con el hecho de que el objeto que recibe la notificación lo hace en el mismo hilo que el remitente de la notificación.
Desde el Apple iOS Documentation on Notification Centers:
En una aplicación multiproceso, las notificaciones son siempre entregados en el hilo en el que se publicó la notificación, que puede no ser el mismo hilo en la que un observador en sí registrado.
Esto inevitablemente le causará dolores de cabeza.
Si la notificación está siendo recibida por algo en el hilo principal, he encontrado que aparecer en el hilo principal desde el hilo de fondo para emitir una notificación es la forma más segura de hacerlo. Es muy simple de hacer:
//Call this to post a notification and are on a background thread
- (void) postmyNotification{
[self performSelectorOnMainThread:@selector(helperMethod:) withObject:Nil waitUntilDone:NO];
}
//Do not call this directly if you are running on a background thread.
- (void) helperMethod{
[[NSNotificationCenter defaultCenter] postNotificationName:@"SOMENAME" object:self];
}
Desafortunadamente esto introduce un acoplamiento sutil entre el emisor y el receptor en el que está modificando el remitente para acomodar el receptor.
Una solución aún mejor, como señala XJones, es hacer que el remitente envíe la notificación en cualquier tema que decida, y luego hacer al oyente responsable de usar el hilo apropiado para realizar cualquier acción que necesite.
Espero que haya sido útil.
Hice referencia a este problema en un comentario en mi respuesta. No me gusta su solución exactamente a/c del acoplamiento entre el objeto que publica la notificación y el observador. La publicación de objetos debe publicarse en el hilo que quiera. El receptor debe manejar la notificación en el hilo que necesita (por ejemplo, el receptor puede reenviar la notificación al hilo principal o cualquier otro hilo). Apple también usa este método en su código de muestra. – XJones
Estoy completamente de acuerdo. He actualizado mi respuesta para reflejar este método. – PixelCloudSt
@PixelCloudSt Entiendo el acoplamiento en este método, pero ¿cómo haré para que el receptor escuche en múltiples hilos? –