Nella mia piccola app per iPad ho una funzione "cambia lingua" che utilizza un osservatore. Ogni view controller si registra con il mio osservatore durante il suo viewDidLoad:
.
- (void)viewDidLoad
{
[super viewDidLoad];
[observer registerObject:self];
}
Quando l'utente preme il pulsante "cambia lingua", la nuova lingua viene memorizzata nel mio modello e l'osservatore viene avvisato e chiama un updateUi:
selettore sui suoi oggetti registrati.
Funziona molto bene, tranne quando ho i controller di visualizzazione in un TabBarController. Questo perché quando la barra delle schede viene caricata, recupera le icone delle schede dai controller secondari senza inizializzare le visualizzazioni, quindi viewDidLoad:
non viene chiamata, quindi i controller di visualizzazione non ricevono notifiche di modifica della lingua. Per questo motivo, ho spostato le mie registerObject:
chiamate nel init
metodo.
Quando mi viewDidLoad:
registravo con il mio osservatore, ero solito viewDidUnload:
annullare la registrazione. Dal momento che mi sto registrando init
, ha molto senso annullare la registrazione dealloc
.
Ma ecco il mio problema. Quando scrivo:
- (void) dealloc
{
[observer unregisterObject:self];
[super dealloc];
}
Ottengo questo errore:
ARC proibisce l'invio esplicito di "dealloc"
Dal momento che devo chiamare [super dealloc]
per assicurarmi che le superclassi vengano ripulite correttamente, ma ARC lo proibisce, ora sono bloccato. C'è un altro modo per essere informato quando il mio oggetto sta morendo?