Je suis en cours addObserver:selector:name:object:
en viewDidLoad
. J'utilise removeObserver:name:object:
dans viewWillDisappear:animated:
pour supprimer l'observateur.Les observateurs seront-ils automatiquement supprimés lorsque les observateurs deviendront nuls?
Que se passera si je ne supprimer observateur par le passage de paramètres erroné de removeObserver:name:object:
?
(Par exemple, l'observateur n'est pas supprimé si je passe mal notification au paramètre name
ou mauvais objet à object
ou Observer
)
Si l'observateur toujours pas nul après avoir appelé removeObserver:name:object:
, je peux constater que la suppression a échoué parce que l'observateur notificationSelector sera appelé.
Mais si l'observateur se nul après avoir appelé removeObserver:name:object:
, je ne peux pas savoir si le retrait observateur a échoué ou non.
Est-ce que les observateurs enlevés automatiquement observateur deviennent nulles?
Ou est-notification dispatch table
de NSNotificationCenter
est devenu plus grand et, finalement, l'application devient lente?
EDIT
Lorsque j'utilise la sous-classe d'objet UIViewController pour l'observateur, l'application ne tombe pas en panne après dealloc
de ViewController sont appelés.
Mais quand j'utilise un objet d'une autre classe, l'application heurtes après dealloc
de l'objet sont appelés.
merci. J'ai trouvé que si j'utilise la sous-classe de UIViewController en tant qu'observateur, l'erreur d'exécution ne se produit pas. Si j'utilise l'objet d'une autre classe en tant qu'observateur, une erreur d'exécution se produit. Peut-être, UIViewController appelle 'removeObserver: self' dans son' dealloc'. Mais je ne sais pas comment vérifier si super classe vraiment enlevé l'observateur. –
J'ai googlé votre citation de la référence (?), Mais je n'ai pas pu la trouver, donc c'est probablement de l'ancienne information. Maintenant, il semble que ce soit encore correct à ce moment-là; NSNotificationCenter ne conserve pas l'observateur, car je fais appel à dealloc sur un objet sans même le supprimer en tant qu'observateur. Maintenant, bien sûr, la bonne chose serait de l'enlever dans dealloc selon cette réponse. La documentation n'indique toujours pas si l'observateur est retenu ou non et est donc un peu OMI peu clair. – Jonny