ios - ion thumbnail size
KVO y ARC cómo eliminarObserver (3)
¿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
}
}
Elsewhere del desbordamiento de la pila, 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.