Sto tentando di utilizzare l'osservazione dei valori-chiave in una delle mie classi. Ho registrato gli osservatori nel metodo init e li ho rimossi/cancellati nel dealloc, ma ottengo il seguente errore che sembra verificarsi prima che il mio metodo dealloc venga chiamato, secondo le mie stampe di debug.Quando dovrei rimuovere gli osservatori? Errore nel deallocare gli oggetti prima di rimuovere gli osservatori
Un'istanza 0x583870 della classe TekkPoint viene deallocata mentre gli osservatori di valori chiave sono ancora registrati con esso. Le informazioni di osservazione sono trapelate e potrebbero anche essere erroneamente associate ad altri oggetti. Impostare un punto di interruzione su NSKVODeallocateBreak per fermarsi qui nel debugger. Ecco l'attuale informazioni di osservazione: ( Contesto: 0x0, di proprietà: 0x536400> Contesto: 0x0, di proprietà: 0x55aba0> )
C'è un modo particolare che dovrei rimuovere gli osservatori? O forse un posto particolare che dovrei rimuovere?
In base a questo question Sto facendo le cose per bene, ma perché dovrei ricevere questo messaggio di errore?
Ecco la mia routine dealloc:
- (void)dealloc {
// Remove all observers.
for (NSString *path in [TekkPoint observedPaths]) {
[self removeObserver:[option_ tChart]
forKeyPath:path];
}
[description_ release];
[weight_ release];
[super dealloc];
}
Una cosa da notare che potrebbe essere strano mia implementazione è che sto aggiungendo e rimuovendo gli osservatori dal observee, questo potrebbe causare il mio problema?
uomo questa risposta mi ha appena salvato la vita, tu il re –
semplice e facile. +1 – govi
Un'altra opzione è creare un riferimento forte all'oggetto osservato nell'oggetto che lo osserva. In questo modo l'oggetto osservato non sarà rilasciato fino a quando anche l'osservatore non verrà rilasciato. – Avario