Quiero tener múltiples observadores en eventos múltiples de un solo objeto (relación 1-a-N).Cuándo utilizar NSNotificationCenter
Un mecanismo para lograr esta tarea lo proporciona el NSNotificationCenter
. El mecanismo parece bastante excesivo cuando se usa para mi problema.
¿Cómo lo haría manualmente sin el uso de NSNotificationCenter
:
- (void)addDelegate:(id<DelegateProtocol>)delegate;
- (void)removeDelegate:(id<DelegateProtocol>)delegate;
para agregar y quitar los observadores de mi objeto.
- (void)someEventFired:(NSObject<NSCopying> *)eventData
{
for (id delegate in delegates) {
NSObject *data = [eventData copy];
[delegate someEventFired:data];
}
}
Este mecanismo es directo y simple de implementar sin que los objetos tengan que compartir cadenas adicionales.
- ¿Hay un patrón oficial para los delegados de 1 a N (como los eventos de C#) en un marco de iOS además del
NSNotificationCenter
? - ¿Cuándo se debe usar el
NSNotificationCenter
y cuándo no? - ¿Cuándo debería usarse una implementación como la que estoy sugiriendo aquí y cuándo no?
Raramente, o nunca, hice uso de NSNotificationCenter pero fui con el mismo método que usted describe. Lo he usado en numerosas aplicaciones iOS (diría más de 50 aplicaciones) durante muchos años, hasta ahora no he visto ningún problema. Un posible inconveniente podría ser que usted necesita estar seguro de eliminar observadores a veces, o pueden no ser liberados cuando se espera porque son retenidos por el guardián de los delegados. – Jonny
Creo que aunque NSNotificationCenter no es el enfoque que conocemos de C#, aún debemos centrarnos en utilizar los patrones de diseño para la plataforma específica para la que trabajamos. Dicho esto, fui con NSNotificationCenter en varias aplicaciones ahora (no tanto como tú), y no creo que el código empeorara a través de él. – Etan