KVO y ARC cómo eliminarObserver

¿Cómo eliminas un observador de un object en ARC ? ¿Simplemente agregamos el observador y nos olvidamos de eliminarlo? Si ya no administramos la memory manualmente, ¿dónde renunciamos a la observación?

Por ejemplo, en un controller de vista:

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

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

Todavía puede implementar -dealloc en ARC, que parece ser el lugar apropiado para eliminar la observación de los valores key. Simplemente no llamas a [super dealloc] desde este método más.

Si estuvieras anulando -release antes, estabas haciendo las cosas de manera incorrecta.

Lo hago con este codigo

 - (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 otras partes del desbordamiento de stack, Chris Hanson aconseja usar el método de finalización para este propósito e implementar un método de invalidation por separado para que los propietarios puedan decirle a los objects que han terminado. En el pasado, he encontrado que las soluciones de Hanson están bien pensadas, así que voy a ir con eso.