KVO y ARC cómo eliminarObserver

¿Cómo se elimina un observador de un objeto bajo ARC ? ¿Acabamos de agregar al observador y olvidarnos de eliminarlo? Si ya no gestionamos la memoria manualmente, ¿dónde renunciamos a la observación?

Por ejemplo, en un controlador de vista:

[self.view addObserver:self forKeyPath:@"self.frame" options:NSKeyValueObservingOptionNew context:nil]; 

Anteriormente, llamaba a removeObserver: en el método dealloc del controlador de dealloc .

Aún puede implementar -dealloc en ARC, que parece ser el lugar apropiado para eliminar la observación de valores clave. Simplemente no llama a [super dealloc] desde este método más.

Si estaba anulando -release antes, estaba haciendo las cosas mal.

Lo hago con este código

 - (void)dealloc { @try{ [self.uAvatarImage removeObserver:self forKeyPath:@"image" context:nil]; } @catch(id anException) { //do nothing, obviously it wasn't attached because an exception was thrown } } 

En otra parte del desbordamiento de la stack, Chris Hanson recomienda utilizar el método de finalización para este fin y la implementación de un método de invalidación separado para que los propietarios puedan decirles a los objetos que están terminados. En el pasado, he encontrado que las soluciones de Hanson están bien pensadas, así que iré con eso.

    Intereting Posts