Удаляет ли removeObserver() всех наблюдателей?
Остается ли удалить все NSNotificationCenter.defaultCenter по имени?
NSNotificationCenter.defaultCenter().removeObserver(self)
Если у меня есть следующий вид в том же представлении viewDidLoad(), они будут удалены с помощью одной строки выше?
NSNotificationCenter.defaultCenter().addObserver(self, selector: "method1", name: UITextFieldTextDidChangeNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "method2", name: UITextViewTextDidChangeNotification, object: nil)
Ответы
Ответ 1
Да, вызов removeObserver(self)
удалит всех наблюдателей, которые вы добавили, используя addObserver:selector:name:object:
с наблюдателем я, независимо от имени уведомления, объекта или селектора, который вы указали.
Плохая идея использовать метод removeObserver(self)
в любом месте, но в методе deinit объекта, потому что некоторые системные классы (или подклассы объектов, которые вы определяете), возможно, добавили наблюдателей, о которых вы не знаете. Этот вызов метода является вызовом "выжженной земли", который удаляет ВСЕ наблюдателей из объекта.
Вместо этого вы должны вызвать removeObserver:name:object:
и удалить только добавленных наблюдателей.
Ответ 2
Удаляет все записи, указывающие данного наблюдателя из таблицы диспетчеризации приемников.
https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/index.html#//apple_ref/occ/instm/NSNotificationCenter/removeObserver:
Итак, я думаю, он удалит всех наблюдателей только тогда, когда все они будут такими же, как указано параметром.