Что делает аргумент «объект» в «postNotificationName:object:»?

- (void)postNotificationName:(NSString *)notificationName 
                      object:(id)notificationSender

Может ли кто-нибудь помочь мне понять параметр object в приведенном выше методе?

я использовал

[[NSNotificationCenter defaultCenter] postNotificationName:@"Downloadfinished"
                                                    object:self]; 

и

[[NSNotificationCenter defaultCenter] postNotificationName:@"Downloadfinished"
                                                    object:nil];

Они оба работают в моем случае. Но я хочу понять, что делает аргумент и что я должен передать.


person Nitya    schedule 11.10.2013    source источник
comment
возможный дубликат как использовать свойство объекта NSNotificationcenter   -  person User 1531343    schedule 11.10.2013


Ответы (3)


Из документации:

notificationSender 
The object posting the notification.

Вот и все, может быть вам это нужно, а может и нет. Если вы не используете его, когда получаете уведомление, не имеет значения, равно оно нулю или нет.

проверьте документацию:

NSNotificationCenter

person Antonio MG    schedule 11.10.2013
comment
Я бы сказал, что отправка self, когда вы не используете этот параметр, может сбить с толку того, кто пытается понять код. Если сообщение является только информацией о том, что что-то произошло и контекст для него не нужен - отправьте nil. С целью ясного намерения. - person Tomasz Bąk; 11.10.2013

NSNotification имеет следующие три атрибута:

  1. name - уникальный идентификатор уведомления.
  2. object - параметр id, который может быть передан получателю и может использоваться для любых целей на принимающей стороне, если это необходимо.
  3. userInfo - NSDictionary объект: если вы хотите передать несколько объектов, создайте NSDictionary с парами ключ/значение и передайте его дальше.

Если вы не хотите ничего передавать получателю, передайте nil вместо object.

person blackzero    schedule 11.10.2013

Регистр: Я

Когда вы пишете объект как Self или любой другой объект, это означает, что уведомление будет срабатывать с объектом, что означает передачу объекта в качестве параметра уведомления.

вы получите объект следующим образом:

Пример

[[NSNotificationCenter defaultCenter] postNotificationName:kProductsLoadedNotification object:self];

[[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(productsRequestCompleted:)
                                                     name:kProductsLoadedNotification
                                                   object:self];
- (void)productsRequestCompleted:(NSNotification *)notification
{
NSLog("%@",[notification object]); //You will get the Parameter
}

Когда

Регистр: ноль

Когда вы пишете объект как nil, это означает, что уведомление будет срабатывать без объекта, без передачи объекта в качестве параметра уведомления.

person user1673099    schedule 11.10.2013
comment
Это полезно для вас? - person user1673099; 11.10.2013