Обратной стороной к нескольким экземплярам NSNotifcationCenter в какао Touch

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

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


person jraede    schedule 03.05.2013    source источник


Ответы (2)


Вы можете использовать параметр 'object' методов NSNotificationCenter, чтобы получить этот эффект, не выделяя по одному для каждого объекта.

person Catfish_Man    schedule 03.05.2013
comment
Поэтому для каждого наблюдателя я должен специально проверять, object == self.model или что-то в этом роде? Это обычная практика? - person jraede; 04.05.2013
comment
Нет, когда вы регистрируетесь в качестве наблюдателя, вы включаете объект в качестве одного из параметров регистрации. В этом случае центр уведомлений будет доставлять только совпадающие уведомления. - person Catfish_Man; 04.05.2013
comment
БИНГО. Нигде этого не видел. Спасибо. - person jraede; 04.05.2013
comment
Является ли это в целом лучшей практикой, чем использование связанных классов и использование прямого объявления? - person jraede; 04.05.2013
comment
Простое использование уведомлений вместо вызовов методов на самом деле не снижает взаимосвязь, это просто делает взаимосвязь менее прямой. Уведомления в первую очередь полезны в ситуациях 1: N уведомитель: наблюдатель. - person Catfish_Man; 04.05.2013
comment
Мне просто странно использовать object.view = self, self.object=object. Но я предполагаю, что в этом случае, когда это один на один, это то же самое, что использовать центр уведомлений. - person jraede; 04.05.2013
comment
Ага. Не забудьте сделать одно преимущество в цикле слабым или разорвать цикл вручную. - person Catfish_Man; 04.05.2013

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

[NSNotificationCenter defaultCenter]
person aaronman    schedule 03.05.2013
comment
Я знаю об этом, но мне было интересно, есть ли причина, по которой не может быть большего. - person jraede; 04.05.2013
comment
Вы, конечно, можете выделить больше центров уведомлений, если хотите. По умолчанию это просто: параметр по умолчанию, а не единственный вариант. - person Catfish_Man; 04.05.2013
comment
Вы можете, но это снизит производительность, поэтому не рекомендуется - person aaronman; 04.05.2013
comment
прочтите это, в нем говорится. Каждая запущенная программа Какао имеет центр уведомлений по умолчанию. Обычно вы не создаете свои собственные. - person aaronman; 04.05.2013
comment
Итак, мы идем. Таким образом, снижение производительности из-за наличия нескольких экземпляров перевешивает снижение производительности при просмотре всех представлений, которые прослушивают все модели, всякий раз, когда запускается событие? Я просто подумал, что это может также сказаться на производительности, если только одна модель вызвала событие и сообщила об этом каждому представлению. - person jraede; 04.05.2013
comment
Гадать о производительности редко бывает продуктивно. Тем не менее, публикация уведомлений без объекта для их фильтрации, скорее всего, будет дороже в ЦП, чем создание дополнительных центров уведомлений, но может использовать меньше оперативной памяти. - person Catfish_Man; 04.05.2013