NSNotification in iOS è un buon design?

1

A causa di alcune librerie C ++ essenziali, devo mescolare Objective-C e C ++ nel mio codice. Ma il problema è che la callback tra C e Objective-C è estremamente difficile da progettare e manipolare, quindi ho trovato NSNotification per il salvataggio.

Molte funzioni nella mia libreria C ++ sono in esecuzione in modo asincrono e ho trovato che NSNotification mi può aiutare molto. Inviando un gruppo unico di notifiche, le mie librerie C ++ e gestore Objective-C controllanti loro possono comunicare senza intoppi.

Ma è un buon design? Gli altri modi sono limitati includendo Objective-C running time binding o utilizzando block .

    
posta Frank Joe 03.08.2018 - 22:11
fonte

2 risposte

1

NSNotification è un ottimo strumento da utilizzare se soddisfa le tue esigenze. Se vuoi un'interfaccia C diritta, puoi sempre utilizzare CFNotification da CoreFoundation.

In termini di design, ti consente di disaccoppiare classi non correlate che devono comunicare. Invece di dover far sì che la classe C ++ sappia che l'oggetto che vuole sapere quando qualcosa cambia è una classe Objective-C di un particolare tipo, puoi semplicemente postare una notifica quando si verifica un evento. Qualsiasi e tutti gli altri oggetti nel programma possono scegliere di ascoltare quella notifica o ignorarla.

Naturalmente, quando le classi sono accoppiate liberamente, può essere più difficile eseguire il debug dei problemi poiché non si dispone di un puntatore diretto all'oggetto che ha impostato la notifica e probabilmente non si dispone di uno stack frame che punta a dove il problema è iniziato. Ma di solito la facilità con cui è possibile aggiungere e rimuovere gli ascoltatori è un vantaggio sufficiente a far sì che valga la pena farlo comunque. Puoi sempre inserire qualcosa nel dizionario userInfo della notifica che rimanda all'oggetto che ha inviato la notifica se hai bisogno di qualcosa di simile per il debug.

    
risposta data 04.08.2018 - 05:30
fonte
1

Da un punto di vista dell'implementazione, l'invio di una NSNotification è esattamente uguale a chiamare tutti i metodi e i blocchi che si sono registrati per osservare la notifica in un ordine non specificato.

Quindi il caso d'uso per NSNotification è che il tuo codice sta facendo qualcosa e presuppone che un altro codice debba saperlo, ma non ha la conoscenza o non vuole che la conoscenza chiami metodi appropriati, probabilmente in classi molto variabili . È una caratteristica molto utile, anche nel puro codice Objective-C.

Il modo più semplice per combinare C ++ e Objective-C è scrivere codice Objective-C ++.

    
risposta data 04.08.2018 - 18:40
fonte

Leggi altre domande sui tag