0

У меня довольно сложное приложение iphone, которое имеет много асинхронных процессов. Чтобы справиться с этим, я активно использую Центр NSNotification. Мой вопрос заключается в том, что такое «лучшая практика», если такая вещь существует », для регистрации уведомлений? Сейчас они посыпали мой код опасным образом. Я собираюсь пойти на производство, и я хочу, чтобы его очистили хотя я имею в виду метод «registerNotifications» в viewDidLoad основного представления, который, очевидно, регистрирует все уведомления одним выстрелом. Это звучит разумно? Если не то, что было бы предпочтительным способом борьбы с этим. Спасибо заранее за вашу помощь !!iPhone Objective-C Размещение NSNotifications

ответ

4

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

Уведомления не должны «разбрызгиваться по всему коду», но они должны управляться исключительно объектами, которые их получают. Если вы используете большое количество уведомлений, вам может понадобиться создать класс с выделенными методами для обработки нескольких уведомлений, а затем ваши другие классы наследуются от этого класса. Таким образом, вы получаете автоматическое управление.

Одна из больших ошибок, которые люди делают с уведомлениями, заключается в том, что они регистрируют контроллеры, когда им действительно нужно регистрировать свою модель данных. Например, предположим, что вы загружаете некоторые данные из URL-адреса, и вы хотите обновить интерфейс по мере его продвижения и/или по завершении. Если у вас несколько видов в пользовательском интерфейсе и вы регистрируете контроллеры, то каждое представление должно управлять уведомлением (их может быть несколько.) Однако, если вы настроили общий тип данных для получения уведомления, вам нужно иметь только максимум два уведомления. Один пойдет в datamodel, так что датамодель может обновить себя, и тогда у вас может возникнуть проблема с датамоделем для общего уведомления для любых прослушиваемых просмотров, чтобы обновить себя из datamodel.

Создание вашего контроллера в зависимости от модели данных упрощает дизайн во всех случаях.

+0

отличный ответ спасибо! – ennuikiller

0

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

+0

так, другими словами, ваше высказывание, я должен оставить их посыпанными по всему коду? – ennuikiller