6

Ho un'applicazione per iPhone che fondamentalmente sta ricevendo informazioni da un'API (in XML, ma forse JSON alla fine). Gli oggetti risultato vengono generalmente visualizzati nei controller di visualizzazione (principalmente le tabelle).Protocolli NSNotification vs. Delegate?

Ecco l'architettura in questo momento.

Ho classi NSOper recuperare i diversi oggetti dal server remoto. Ognuna di queste classi NSOperation, impiegherà un metodo delegato personalizzato che ripristinerà gli oggetti risultanti mentre vengono analizzati, e infine un metodo quando non ci sono più risultati disponibili. Così, il protocollo per i delegati sarà qualcosa di simile:

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

Penso che la soluzione funziona bene, ma io non finire con un gruppo di protocolli di delegare in tutto e poi i miei controller di vista devono implementare tutti questi metodi delegato . Non penso sia male, ma sono sempre alla ricerca di un design migliore.

Quindi, sto pensando di utilizzare NSNotifications per rimuovere l'uso dei delegati. Potrei includere l'oggetto nella parte userInfo della notifica e pubblicare solo oggetti come ricevuti, e quindi un evento finale quando non ci sono più disponibili. Quindi potrei avere un solo metodo in ogni controller di visualizzazione per ricevere tutti i dati, anche quando si utilizzano più oggetti in un controller. †

Quindi, qualcuno può condividere con me alcuni pro/contro di ciascun approccio. Dovrei considerare il refactoring del mio codice per utilizzare gli eventi piuttosto che i delegati? Uno è migliore dell'altro in certe situazioni? Nel mio scenario non vedo davvero di ricevere notifiche in più punti, quindi forse i delegati basati su protocollo sono la strada da percorrere.

Grazie!

risposta

5

In realtà, il tuo design suona. Il chiaro approccio del cacao sta usando i delegati ed è molto preferito lanciare oggetti in giro. Inoltre, definire i tuoi protocolli in questo modo rende il tuo codice molto esplicito e facile da capire. Tutto sommato: continua il buon lavoro