Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Utilice el lenguaje Objective-C para implementar una función de centro de mensajes (NSnotificationcenter)

Utilice el lenguaje Objective-C para implementar una función de centro de mensajes (NSnotificationcenter)

La forma más básica de comunicación entre objetos es el paso de mensajes. Cocoa proporciona un mecanismo de Centro de notificaciones para completar esta tarea. Su función principal es la comunicación entre dos objetos cualesquiera. El método de uso es muy simple, solo sigue los siguientes pasos:

Supongamos que A y B se comunican, B desencadena un evento y A acepta el evento y responde.

1) A escribe una actualización de la función de respuesta de mensaje personalizada

2) A se registra en el centro de mensajes, [NSNotificationCenter defaultCenter] addObserver: self selector:@selector(update) name:@ Objeto "update":nil]

3) Evento desencadenante B [[NSNotificationCenter defaultCenter] postNotificationName:@"update" object:nil]

Cada proceso tiene un NSNotificationCenter predeterminado, puede obtenga la instancia del centro de mensajes a través del método de clase defaultCenter. El centro de mensajes puede manejar mensajes entre diferentes objetos en el mismo proceso. Si desea comunicarse entre procesos en la misma máquina, debe utilizar NSDistributedNotificationCenter.

El centro de mensajes distribuye mensajes a todos los observadores de forma sincrónica. En otras palabras, el control no volverá a la persona que llama hasta que todos los observadores hayan recibido el mensaje y lo hayan procesado. Si necesita procesar mensajes de forma asincrónica, debe utilizar la cola de notificaciones NSNotificationQueue.

En programas multiproceso, las notificaciones se distribuirán a cada hilo que inicie el mensaje, que puede no ser el mismo hilo que el hilo donde está registrado el observador.

Instancia:

@implementation TestClass

- (void) dealloc

{

// Si no se elimine como observador, el Centro de notificaciones

// continuará intentando enviar objetos de notificación al

// objeto desasignado. [[NSNotificationCenter defaultCenter] removeObserver:self]

[super dealloc]

}

- (id) init

{

self = [super init];

if (!self) return nil;

// Agrega esta instancia de TestClass como observador de TestNotification.

// Le decimos al centro de notificaciones que nos informe de "TestNotification"

// notificaciones usando el selectorceivedTestNotification: Por

// especificando el objeto: nil, le decimos al centro de notificaciones que no estamos

// interesados ​​en quién publicó la notificación. Si proporcionó un objeto

// real en lugar de nil, el centro de notificaciones lo hará. solo le notificará

// cuando la notificación fue publicada por ese objeto en particular

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(receiveTestNotification. :)

nombre:@"TestNotification"

objeto:nil]

return self

}

- (nulo) recibirTestNotification:(NSNotification *) notificación

{

/

/ [nombre de la notificación] siempre debe ser @"TestNotification"

// a menos que utilice este método para observar otras notificaciones

//

. if ([[nombre de la notificación] isEqualToString:@"TestNotification"])

NSLog (@"¡Recibió correctamente la notificación de prueba!"); @fin