Почему третий аргумент NSNotification часто является object: nil?

Я не вижу объяснения объекта третьего аргумента в apple doc https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsnotificationcenter_Class/Reference/Reference.html

Во всех подобных примерах Как создать класс для отправки и получения событий через NSNotificationCenter в Objective-C? это ноль

Никто этого не объясняет: так почему же object: nil?

Когда это не ноль?


person user310291    schedule 01.05.2012    source источник


Ответы (2)


Это не ноль, когда вы смотрите на определенный объект.

Сценарий: у вас есть два объекта, каждый из которых запускает события через NSNotificationCenter. Вы хотите получать события только для объекта A.

Решение: подпишитесь через NSNotificationCenter и передайте objectA в качестве параметра объекта.

person borrrden    schedule 01.05.2012

Это не ноль, когда вам нужно знать, какой объект отправил уведомление. Взгляните на -(void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender

notificationSender

Объект, уведомления о котором хочет получать наблюдатель; то есть, наблюдателю доставляются только уведомления, отправленные этим отправителем.

Если вы передадите nil, центр уведомлений не будет использовать отправителя уведомления, чтобы решить, следует ли доставить его наблюдателю.

(из той же ссылки NSNotificationCenter, которую вы связали)

person Kreiri    schedule 01.05.2012
comment
Как наблюдатель знает notificationSender, поскольку шаблон проектирования Observer должен отделять наблюдателей от Observer :) - person user310291; 01.05.2012
comment
@ user310291 Это настоящий вопрос или саркастический комментарий? - person borrrden; 01.05.2012
comment
Это, конечно, реальный вопрос: как мне получить ссылку? Означает ли это, что мне нужно создать экземпляр Observee или получить его с какого-то контроллера? - person user310291; 01.05.2012
comment
@ user310291 Да, обычно вы регистрируетесь на события от чего-то, что вы создаете в том же классе (например, MPMoviePlayer). У меня есть MPMoviePlayer как iVar, и когда я его использую, я регистрирую класс, содержащий его, для его событий (завершено, остановлено и т. Д.), Когда пользователь нажимает кнопку, запускающую фильм, и отменяю регистрацию, когда фильм завершается ( внутри NSNotification для прекращения). - person borrrden; 01.05.2012