Desidero avere più osservatori su più eventi di un singolo oggetto (relazione 1-a-N).Quando utilizzare NSNotificationCenter
Un meccanismo per realizzare questa operazione è fornito dallo NSNotificationCenter
. Il meccanismo sembra piuttosto eccessivo se usato per il mio problema.
Come vorrei farlo manualmente senza l'uso di NSNotificationCenter
:
- (void)addDelegate:(id<DelegateProtocol>)delegate;
- (void)removeDelegate:(id<DelegateProtocol>)delegate;
per aggiungere e rimuovere gli osservatori dal mio oggetto.
- (void)someEventFired:(NSObject<NSCopying> *)eventData
{
for (id delegate in delegates) {
NSObject *data = [eventData copy];
[delegate someEventFired:data];
}
}
Questo meccanismo è semplice e semplice da implementare senza che gli oggetti debbano condividere stringhe aggiuntive.
- Esiste uno schema ufficiale per i delegati 1-to-N (come gli eventi C#) in un framework iOS oltre allo
NSNotificationCenter
? - Quando deve essere utilizzato lo
NSNotificationCenter
e quando no? - Quando deve essere utilizzata un'implementazione come quella che sto suggerendo qui e quando no?
Ho usato raramente o mai NSNotificationCenter ma ho utilizzato lo stesso metodo descritto. L'ho usato in numerose app iOS (direi sopra le 50 app) per molti anni, finora non ho riscontrato alcun problema. Un possibile trucchetto potrebbe essere il fatto che è necessario essere certi di rimuovere gli osservatori a volte, o potrebbero non essere rilasciati quando previsto, perché sono conservati dal detentore dei delegati. – Jonny
Penso che anche se NSNotificationCenter non è l'approccio che conosciamo da C#, dovremmo comunque concentrarci sull'uso dei modelli di progettazione per la piattaforma specifica per cui stiamo lavorando. Detto questo, sono andato con NSNotificationCenter in diverse app ora (non come molti come te, però), e non credo che il codice sia peggiorato con esso. – Etan