Вопрос

У меня есть приложение для iPhone, которое в основном получает информацию из API (в формате XML, но, возможно, в конечном итоге JSON).Результирующие объекты обычно отображаются в контроллерах представления (в основном в таблицах).

Вот такая архитектура прямо сейчас.

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

(void) ObjectTypeResult:(ObjectType *)result;
(void) ObjectTypeNoMoreResults;

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

Итак, я подумываю об использовании NSNotifications, чтобы исключить использование делегатов.Я мог бы включить объект в часть userInfo уведомления и просто публиковать объекты как полученные, а затем завершающее событие, когда больше не будет доступно.Тогда у меня мог бы быть просто один метод в каждом контроллере представления для получения всех данных, даже при использовании нескольких объектов в одном контроллере.†

Итак, может ли кто-нибудь поделиться со мной некоторыми плюсами / минусами каждого подхода.Должен ли я рассмотреть возможность рефакторинга своего кода, чтобы использовать События, а не делегатов?Является ли одно лучше другого в определенных ситуациях?В моем сценарии я действительно не собираюсь получать уведомления в нескольких местах, так что, возможно, делегаты на основе протокола - это правильный путь.

Спасибо!

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top