web-dev-qa-db-fra.com

RemoveObserver () supprime-t-il tous les observateurs?

Ce qui suit supprime-t-il tous les NSNotificationCenter.defaultCenter auxquels une vue a été ajoutée nommément?

NSNotificationCenter.defaultCenter().removeObserver(self)

Si j'ai les éléments suivants dans la même vue de viewDidLoad (), seront-ils supprimés avec la seule ligne ci-dessus?

NSNotificationCenter.defaultCenter().addObserver(self, selector: "method1", name: UITextFieldTextDidChangeNotification, object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: "method2", name: UITextViewTextDidChangeNotification, object: nil)
13
4thSpace

Oui, l'appel removeObserver(self) supprimera tous les observateurs que vous avez ajoutés à l'aide de addObserver:selector:name:object: avec un observateur de vous-même, quel que soit le nom de notification, l'objet ou le sélecteur que vous avez spécifié.

Il est déconseillé d’utiliser la méthode removeObserver(self) ailleurs que dans la méthode deinit de votre objet, car certaines classes système (ou sous-classes d’objets que vous définissez) peuvent avoir ajouté des observateurs inconnus. Cet appel de méthode est un appel "terre brûlée" qui supprime TOUS les observateurs de l'objet.

Au lieu de cela, vous devez appeler removeObserver:name:object: et ne supprimer que les observateurs que vous avez ajoutés.

32
Duncan C