Подтвердить что ты не робот

Какая ссылка NSNotificationCenter поддерживает объект 'observer &'?

Может ли кто-нибудь уточнить/разъяснить ситуацию в отношении -[NSNotificationCenter addObserver:selector:name:object:]?

  • Какие типы ссылок хранятся центром уведомлений аргументов 'observer' и 'object'?

  • Каковы наилучшие методы удаления наблюдателей из центра уведомлений?

  • Каковы особые проблемы для многопоточных приложений, особенно в отношении аргумента "object"?

  • Каковы различия в поведении этого метода в средах GC и не GC?

  • Являются ли какие-либо существенные различия (с точки зрения клиента) между мобильными и настольными средами в этом методе?

Также будут приветствоваться любые указатели на существующие статьи, которые охватывают это. Я Googled, но был удивлен, когда нашел небольшое углубленное обсуждение этих вопросов (хотя, возможно, я не использовал правильные магические ключевые слова).

4b9b3361

Ответ 1

какие типы ссылок сохраняются центр уведомления аргументы 'observer' и 'object'?

Я считаю слабую ссылку, хотя это просто из памяти (каламбур не предназначен).

каковы наилучшие методы для удаление наблюдателей из центр уведомлений?

Всегда удаляйте зарегистрированный объект из центра уведомлений до того, как они будут выпущены. Метод dealloc объекта является хорошим местом для этого, если он настроил сама регистрацию или когда вы отпустите ее, если другой объект управляет подписками на уведомления. Имейте это в виду, и это не имеет значения.

каковы особые проблемы для многопоточные приложения, особенно WRT аргумент "объект"?

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

каковы различия в поведении этого метода в GC и не GC среда?

Я не помню, чтобы слышать все, о чем вам нужно беспокоиться, хотя я еще не использовал GC.

- любые существенные различия (с точки зрения клиента) между мобильных и настольных это поведение метода?

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

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

Я думаю, что это больше, потому что NSNotificationCenter довольно прост в использовании, в общем. Если вы беспокоитесь о некоторых случаях, не бойтесь писать быстрое тестовое приложение!

Ответ 2

Текущая ситуация в 2016 году:

iOS 9 изменился NSNotificationCenter, чтобы слабые ссылки целевого объекта.

Это также означает, что вам больше не нужно removeObserver, когда объект dealloc.