2013-06-30 4 views
4

Я понимаю, что в уведомлении, плакате и наблюдателе.Как работает NSNotification

Но я не могу понять, как наше приложение или ОС понимает и отправляет флаг/уведомление классу наблюдателей?

Каков механизм этого?

Ваш ответ и помощь будут оценены очень много.

Thanks

ID.

ответ

1

Для того, чтобы отправить уведомление, объект посылает:

[[NSNotificationCenter defaultCenter] postNotificationName:@"notif_key" object:nil userInfo:userDict]; 

Теперь, каждый живой объект, слушать уведомления по имени @ «notif_key» может сделать какое-то действие.

Как вы создаете объект для прослушивания?

Он должен работать:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doSomething:) name:@"notif_key" object:nil]; 

и когда первый объект отправляет уведомление, объект наблюдатель будет работать «DoSomething:» метод.

Примечание:

  • UserDict является словарем, где вы можете отправить некоторую информацию для этих наблюдателей.
  • Не забудьте отменить наблюдателя в методе dealloc.
5

Представьте Центр уведомлений в качестве словаря, который имеет ключи имен уведомлений и значений списка наблюдателей (и их определенных методов действий). Когда отправляется уведомление, список наблюдателей для этого имени уведомления получается и повторяется. У каждого наблюдателя есть метод действий, вызванный с информацией уведомления.

Кроме того, во время итерации есть проверка, чтобы определить, представляет ли объект уведомления интерес для наблюдателя (на основе параметров, предоставленных при добавлении наблюдателя).

Процесс уведомления выполняется в потоке, из которого было отправлено уведомление.

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

+0

Итак, если я отправляю уведомление, имеющее наблюдателей 'n', вызывает ли он внутренний цикл для повторения «n» раз? – Gokul

+0

Да, это так. Он может повторить еще что-то, что вы не знаете ... – Wain

4

В основном NotificationCenter сохраняет ссылку на любой объект, зарегистрированный в качестве наблюдателя. С этой ссылкой он также отслеживает, какие уведомления хотят объекты. Когда объект отправляет уведомление, центр передает его каждому зарегистрированному наблюдателю, отправляя наблюдателю сообщение с этим селектором.

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

+0

как мы можем создавать собственные уведомления? – Bhupesh

+1

Либо путем подклассификации, либо без использования метода класса. – uchuugaka

0

Добавьте это к вашему пониманию, на которое ушло некоторое время для меня, чтобы переварить мне голову.Хотя он не говорит о том, как он работает на внутреннем уровне, он сообщает, как он реализован для работы

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

Источник: apple documentation

Таким образом, уведомление может быть зарегистрировано в любом потоке, но метод, связанный с уведомлением выполняется на потоке, на котором размещено уведомление, поэтому если мы хотим, чтобы сделать какое-либо изменение пользовательский интерфейс мы отправляем в основной поток.

Смежные вопросы