Colección de citas famosas - Slogan de motivación - Desarrollo de IOS: comprensión de los principios de notificación de ns

Desarrollo de IOS: comprensión de los principios de notificación de ns

NSNotification es una notificación de mensajes de programación en iOS, que utiliza el patrón de diseño singleton para implementar la transferencia de valor y la devolución de llamada durante el desarrollo. En iOS, NSNotification utiliza el patrón de observador para implementar mensajería entre capas.

NSNotification contiene información necesaria para enviar notificaciones a otros objetos, incluido el nombre, el objeto y el diccionario opcional, enviado por una instancia de NSNotificationCenter o ns Distributed Notification Center. El nombre es la etiqueta que identifica la notificación, el objeto es el objeto que guarda la notificación y la información del usuario almacena otros objetos relacionados. Lo principal a tener en cuenta aquí es que los objetos NSNotification son inmutables.

Puedes usar NotificationWithName:object: o Notification con name:object:userinfo: para crear un objeto de notificación. Pero en el desarrollo real, generalmente usamos NSNotificationCenter directamente para llamar a postNotificationName:object: o publicar la notificación Name:Object:UserInfo:. Estos dos métodos crearán directamente objetos NSNotification internamente y emitirán notificaciones.

Según la documentación del sitio web oficial, no se puede crear una instancia de NSNotification directamente. Si se crea una instancia utilizando el método init, se generará una excepción. También tenga en cuenta que si implementamos el constructor nosotros mismos, no podemos llamar al método init en super.

NSNotificationCenter proporciona un conjunto de mecanismos para enviar notificaciones. Cada aplicación en ejecución tiene un centro de notificaciones predeterminado y podemos crear un nuevo centro de notificaciones para organizar la comunicación en un contexto específico. Solo hay un defaultCenter expuesto por NSNotificationCenter y los campos son de solo lectura. Hay tres formas de exponerlo: agregar, eliminar observadores de notificaciones y emitir notificaciones. La información detallada se muestra en la siguiente tabla:

postNotificationName:object:

postnotification name:object:userInfo:|

Instrucciones relacionadas:

Simplemente entendido como: el búfer del centro de notificaciones. Aunque el Centro de notificaciones ha enviado las notificaciones, las notificaciones colocadas en la cola pueden retrasarse hasta que finalice el ciclo de ejecución o hasta que el ciclo de ejecución quede inactivo. Si hay varias notificaciones idénticas, NSNotificationQueue las fusionará para que solo se envíe una notificación cuando se publiquen varias notificaciones.

La cola de notificaciones mantiene las notificaciones en orden primero en entrar, primero en salir (FIFO). Cuando una notificación pasa al frente de la cola, la cola la envía al centro de notificaciones, que luego distribuye la notificación a todos los objetos registrados como observadores. Cada hilo tiene una cola de notificaciones predeterminada que está asociada con el centro de notificaciones predeterminado del proceso. También podemos crear nuestra propia cola de notificaciones.

Al igual que NSNotificationCenter, NSNotificationQueue expone solo un campo: defaultQueue, que devuelve la cola de notificaciones predeterminada del hilo actual. Estos métodos se dividen en: crear colas de notificaciones y gestionar notificaciones. Los detalles se muestran en la siguiente tabla:

dequeueNotificationsMatching:máscara de agregación:

notificación en cola:estilo de publicación:máscara coalesce:form odes:|

Método relacionado instrucciones:

En el método anterior, debemos prestar atención a dos constantes, que se explican a continuación:

NSNotificationCenter define dos tablas para encapsular la información del observador. define observaciones para guardar la información del observador.

Su estructura se puede simplificar de la siguiente manera:

NSNotificationCenter guarda dos tablas, una se usa para guardar el NotificationName pasado al agregar un observador y la otra se usa para guardar la situación cuando no se pasa el NotificationCenter. al agregar un observador. El análisis específico es el siguiente:

En la tabla nombrada, NotificationName se utiliza como clave de la tabla. Porque al registrar un observador, podemos pasar un parámetro de objeto para escuchar las notificaciones enviadas por este objeto, y una notificación puede agregar varios observadores, por lo que también necesitamos una tabla para guardar la correspondencia entre objetos y observaciones. Las claves y los valores de esta tabla son objeto como clave y observar como valor respectivamente. Entonces, para la tabla con nombre, la estructura final es:

Tabla con nombre

Nota especial: en el desarrollo real, a menudo pasamos el parámetro del objeto a cero y el sistema generará automáticamente un llave. El valor (lista vinculada) correspondiente a esta clave almacena todos los observadores del objeto que no pasaron el NotificationName actual. Cuando se envía NotificationName, se notificará a los observadores de la lista vinculada.

La estructura de una tabla sin nombre es mucho más simple que la de una tabla con nombre. Porque no existe NotificationName como clave. Aquí, los objetos se utilizan directamente como claves, lo que significa que hay un nivel menos de anidamiento de tablas que una tabla con nombre.

Tabla sin nombre

Si NotificationName y el objeto no se pasan al registrar un observador, todas las notificaciones del sistema se enviarán al objeto registrado.

Primero, al inicializar NSNotificationCenter, se creará un objeto que almacena información como tablas con nombre y tablas sin nombre.

Cuando no se pasa NotificationName, el proceso es similar al anterior, excepto que la lista vinculada correspondiente se basa directamente en el objeto. Si no se pasa NotificationName ni el objeto, el observador se agregará a la lista de comodines.

El envío de notificaciones generalmente se logra llamando al método nombre de notificación de publicación: objeto: información de usuario:. Este método creará una instancia interna de NSNotification para guardar los diversos parámetros pasados, incluido el nombre, el objeto y la información de usuario.

En términos generales, el proceso de envío de notificaciones consiste en encontrar la lista vinculada del observador correspondiente según NotificationName y luego recorrer toda la lista vinculada para enviar mensajes a los objetos y selecciones almacenados en cada nodo observador. El proceso específico es el siguiente:

Este método también puede indicar que el hilo que envía la notificación y el hilo que la recibe son el mismo hilo.

¿Cuál es la relación entre NSNotification y la sincronización de subprocesos? Echemos un vistazo a la documentación oficial:

El significado traducido es:

Para obtener más información sobre la relación entre NSNotification y los subprocesos, lea el siguiente artículo: Desarrollo de iOS: NSNotification y Enhebrado.

En términos generales, las funciones de las tres clases relacionadas de NSNotification se pueden resumir como se muestra en la siguiente figura.

Resumen