Удаляет ли 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:

Итак, я думаю, он удалит всех наблюдателей только тогда, когда все они будут такими же, как указано параметром.