Aunque tengo alguna idea de qué usar cuando el uso exacto aún no está claro para mí. ¿Alguien puede explicar con el ejemplo ...? Gracias.KVO vs NSNotification vs protocolo/delegados?
Respuesta
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 desea informar 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 desea saber si una propiedad ha cambiado, puede escuchar los cambios.
Espero que ayude.
Sé que esto es viejo, pero todavía quiero estar en desacuerdo :) Ese artículo destaca excelentes puntos. por qué la API de KVO está rota, pero también afirma con precisión que sigue siendo una herramienta poderosa. Hay muchas situaciones en las que puede guardar un montón de código feo. Úselo con un envoltorio como el que proporcionó si lo desea, pero sí úselo. – Shinigami
Utilice KVO cuando los observadores necesiten una respuesta inmediata. Y uno puede usar NSNotifications cuando los observadores pueden esperar el ciclo de eventos. – MANN
@MANN Creo que no entiendo: las notificaciones no son asincrónicas, también se activan de inmediato (aunque no se obtienen las opciones de cambio de dirección que se obtienen con KVO) – deanWombourne
Usar un delegado cuando existe una relación "maestro/esclavo" (delegado sabe acerca de la clase y la clase sabe sobre el delegado), con una clase más arriba en la jerarquía de control, y cuando está Está claro que no habrá situaciones en las que otros elementos (principalmente UI) esté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.
La delegación es un patrón de diseño que utiliza cuando quiere 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.
En mi opinión, KVO es mejor debido a sus ventajas de cero gastos generales. Las notificaciones tienen una sobrecarga 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.
¿Cuánto, en términos prácticos, es la sobrecarga? – Liron
Incluso cuando los tres serviría su necesidad en una situación, delegado seguiría siendo una opción prefieren:
- Reuseability.
- Auto documentado. Al examinar el archivo de encabezado de la clase, uno reconocería inmediatamente qué/cómo se estaban produciendo los datos intercambiados.
- 1. NSNotification VS KVO
- 2. NSNotification vs. Delegate Protocols?
- 3. textDidChange vs controlTextDidChange
- 4. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 5. TagSoup vs Jsoup vs HTML Analizador vs vs HotSax
- 6. 'método' vs. 'mensaje' vs. 'función' vs. '???'
- 7. ACE vs Boost vs Poco vs wxWidgets
- 8. VS 2008 vs VS 2008 Express
- 9. Atomikos vs JOTM vs Bitronix vs?
- 10. Acumular vs fold vs reducir vs compress
- 11. .NET vs ASP.NET vs CLR vs ASP
- 12. control.BeginInvoke() Vs Dispatcher Vs SynchronizationContext Vs .. - FIABILIDAD
- 13. método vs función vs procedimiento vs clase?
- 14. Rhino simulacro vs Typemock vs JustMock vs
- 15. inline vs __inline vs __inline__ vs __forceinline?
- 16. Exec vs vs ExecWait ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs vs ExecDos ExeCmd
- 17. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, ¿qué tienen en común?
- 18. Crystalspace vs. Irrlicht vs. .....?
- 19. NetSqlAzMan vs AzMan vs (?????)
- 20. SpiderMonkey vs JavaScriptCore vs.
- 21. Django -vs- Grails -vs-?
- 22. Stackpanel: Altura vs ActualHeight vs ExtentHeight vs ViewportHeight vs DesiredSize vs RenderSize
- 23. Mathematica: sin evaluar vs vs Defer Hold vs vs HoldForm HoldAllComplete vs etc, etc
- 24. NSNotification EXC_BAD_ACCESS
- 25. NSImage vs. CIImage vs. CGImage?
- 26. Bitmap vs ImageView vs Drawable
- 27. DIP vs. DI vs. IoC
- 28. Boo vs C# vs Python?
- 29. DbConnection vs OleDbConnection vs OdbcConnection
- 30. MySQL vs Firebird vs SQLite
Intenta leer esto, es un artículo de blog realmente interesante sobre el tema para un punto de vista de programador. http://blog.shinetech.com/2011/06/14/delegation-notification-and-observation/ – Daniel