web-dev-qa-db-fra.com

KVO et ARC comment supprimerObserver

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.

87
drunknbass

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.

126
Brad Larson

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
}
}    
0
user3461902