Perché NSnotificationCenter lancia un'eccezione quando la rilascio?
-
28-09-2019 - |
Domanda
Questa non è così tanto una domanda come un pensiero ponderato: perché NSNotificationCenter lancia un'eccezione quando viene rilasciato? Sono ancora nuovo nello sviluppo di iPhone e quindi non conosco ancora le interiora del cacao, quindi sarebbe bello capire perché.
Sto assegnando il DefaultCenter a una variabile, chiamando ADDOBSERVER: Selettore: Nome: Oggetto e quindi rilasciando la variabile precedente, ma la chiamata a Notify Release Crastra l'app. Non sto facendo nulla di strano nel codice, quindi sarebbe interessante scoprire esattamente perché lo sta facendo.
Qualcuno ha affrontato questo problema?
Soluzione
Da quello che so di NSNotifcation non dovresti assegnare defaultCenter a una variabile ma piuttosto fare qualcosa del tipo:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLogin) name:@"IncorrectLogin" object:nil];
In quel frammento si chiama il centro predefinito e registrando l'oggetto corrente per un determinato messaggio.
E poi per pubblicare un messaggio al centro di notifica che puoi utilizzare:
[[NSNotificationCenter defaultCenter] postNotificationName:@"IncorrectLogin" object:nil];
Uso quanto sopra in tutto il mio codice e non ho problemi con esso.
Altri suggerimenti
Dovrebbe esserci solo un centro di notifica predefinito per la tua app, quindi nessuna delle tue lezioni dovrebbe trattenerlo o rilasciare. Non vorresti che il tuo centro di notifica scomparisse su di te, giusto?
Non credo che tu possieda l'oggetto e quindi non dovresti rilasciarlo.
Ricorda il NARC: New Alloc, Conserva, Copy. Se fai uno di questi, devi rilasciarlo.
Non è tuo da rilasciare.
Ricorda la regola NARC: rilasci solo cose che hai portato all'esistenza usando:
Nuovo Allocate trattenere o copiare.
Narc. Vedere?
Quello che stai facendo con NSNotificationCenter è che stai ricevendo una copia del singleton che rappresenta il centro di notifica predefinito. Vale la pena leggere sui singleton.