6

Tengo una aplicación de iPhone que básicamente está obteniendo información de una API (en XML, pero quizás JSON eventualmente). Los objetos resultantes generalmente se muestran en controladores de vista (principalmente tablas).NSNotification vs. Delegate Protocols?

Aquí está la arquitectura en este momento.

Tengo NSOperation clases que captan los diferentes objetos desde el servidor remoto. Cada una de estas clases de NSOperation tomará un método de delegado personalizado que activará los objetos resultantes a medida que se analizan, y finalmente un método cuando no haya más resultados disponibles. Por lo tanto, el protocolo para los delegados será algo como:

(void) ObjectTypeResult:(ObjectType *)result; 
(void) ObjectTypeNoMoreResults; 

Creo que la solución funciona bien, pero yo no terminar con un montón de protocolos de delegados de todo y luego mis controladores de vista tienen que poner en práctica todos estos métodos de delegado . No creo que sea tan malo, pero siempre estoy buscando un mejor diseño.

Por lo tanto, estoy pensando en usar NSNotifications para eliminar el uso de los delegados. Podría incluir el objeto en la parte userinfo de la notificación y solo publicar los objetos tal como se recibieron, y luego un evento final cuando no haya más disponibles. Entonces podría tener un método en cada controlador de vista para recibir todos los datos, incluso cuando use múltiples objetos en un controlador. †

Entonces, ¿alguien puede compartir conmigo algunos pros/contras de cada enfoque? ¿Debería considerar la refacturación de mi código para usar Eventos en lugar de los delegados? ¿Es uno mejor que el otro en ciertas situaciones? En mi caso, realmente no estoy buscando recibir notificaciones en varios lugares, así que tal vez los delegados basados ​​en el protocolo sean el camino a seguir.

Gracias!

Respuesta

5

En realidad, su diseño suena bien. El enfoque claro de Cocoa está utilizando delegados, y se prefiere mucho tirar objetos. Además, definir sus protocolos de esta manera hace que su código sea muy explícito y fácil de entender. En general: sigan el buen trabajo