Comment supprimer un observateur d'un objet sous ARC ? Ajoutons-nous simplement l'observateur et oublions de le supprimer? Si nous ne gérons plus la mémoire manuellement, où renoncer à l'observation?
Par exemple, sur un contrôleur de vue:
[self.view addObserver:self
forKeyPath:@"self.frame"
options:NSKeyValueObservingOptionNew
context:nil];
Auparavant, j'appelais removeObserver:
dans la méthode dealloc
du contrôleur de vue.
Vous pouvez toujours implémenter -dealloc
sous ARC, qui semble être l'endroit approprié pour supprimer l'observation des valeurs clés. Vous n'appelez simplement pas [super dealloc]
depuis cette méthode.
Si vous remplaçiez -release
avant, vous faisiez les choses dans le mauvais sens.
Je le fais avec ce code
- (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
}
}