Где зарегистрировать объект в качестве слушателя уведомлений? - Максимальная производительность! - PullRequest
1 голос
/ 10 ноября 2009

есть лучшее место, где объект может быть зарегистрирован в Центре уведомлений?

Другими словами, для повышения производительности рекомендуется зарегистрировать объект в качестве прослушивателя уведомлений в init (), awakeFromNib () или другом обработчике событий?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 10 ноября 2009

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

3 голосов
/ 10 ноября 2009

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

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

2 голосов
/ 10 марта 2011

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

Например, вы можете установить блок в качестве обработчика уведомлений, чтобы прослушивать уведомление из свойства класса (например, didChangeNotification в managedObjectContext контроллера представления). В этом случае блок сохранит экземпляр объекта, что означает, что ваш метод init увеличил retainCount в два раза. Если вы не переопределите релиз для правильного управления этим, тогда вы будете держать экземпляры класса рядом, и, что еще хуже, возможно, все еще будете отвечать на эти уведомления.

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

...