uiapplicationdidbecomeactivenotification observer notification defaultcenter iphone ios protocols key-value-observing nsnotifications

iphone - notification - observer ios swift



KVO vs NSNotification vs protocolo/delegados? (5)

En mi opinión, KVO es mejor debido a sus ventajas de cero gastos generales. Las notificaciones tienen gastos generales incluso si no las está usando / observándolas. Para mejorarlo, puede usar NotificationCenters diferentes, pero incluso con eso habrá algunos gastos generales (corríjanme si me equivoco). KVO es un poco complejo pero vale la pena cuando tienes que observar muchas cosas.

Aunque tengo alguna idea que usar cuando el uso exacto aún no está claro para mí. ¿Alguien puede explicar con el ejemplo ...? Gracias.


Incluso cuando los tres satisfagan sus necesidades en una situación, los delegados seguirían siendo una opción preferida:

  1. Reutilizabilidad
  2. Auto documentado. Al examinar el archivo de encabezado de la clase, uno reconocería inmediatamente qué / cómo se llevaban a cabo los intercambios de datos.

La delegación es un patrón de diseño que utiliza cuando desea que algún otro objeto modifique el comportamiento del remitente. Ejemplo: las ventanas de terminal evitan mostrar líneas o caracteres recortados por los bordes de la ventana, ya que el delegado de la ventana del terminal altera el tamaño de la ventana para garantizar esto.

La notificación es un patrón para usar cuando no necesita una respuesta. Ejemplo: recibe una notificación de que el sistema está a punto de quedarse dormido. Al remitente de esa notificación no le importa lo que hagas al respecto.


Use un delegado cuando exista una relación "maestro / esclavo" (el delegado conoce la clase y la clase sabe acerca del delegado), con una clase más arriba en la jerarquía de control, y cuando quede claro que no habrá situaciones en las que otros elementos (principalmente UI) estarán interesados ​​en saber lo que la clase tiene que decir. Use notificaciones cuando la clase no esté interesada en saber quién escucha y cuántos son, cualquiera y cualquier número puede registrarse para las notificaciones. KVO es útil para escuchar "sin que la clase lo sepa", aunque, por supuesto, ese no es el caso, no es necesario cambiar la clase en la que se aplica KVO.


Use un delegado si desea hablar con un solo objeto. Por ejemplo, un tableView tiene un delegado: solo un objeto debe ser responsable de manejarlo.

Use las notificaciones si quiere decirles a todos que algo ha sucedido. Por ejemplo, en situaciones de poca memoria, se envía una notificación que le informa a su aplicación que ha habido una advertencia de memoria. Debido a que muchos objetos en su aplicación pueden querer reducir el uso de su memoria, es una notificación.

No creo que KVO sea una buena idea y trate de no usarlo, pero si quiere saber si una propiedad ha cambiado, puede escuchar los cambios.

Espero que ayude.

PD Esto resume por qué creo que KVO está roto