Можно ли разместить большинство логики и моделей в appDelegate? - PullRequest
5 голосов
/ 09 февраля 2012

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

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

Автор просто делает это, потому что это простые примеры, или это то, чему я должен научиться и начать делать в своих приложениях?

Ответы [ 3 ]

13 голосов
/ 09 февраля 2012

Во-первых, см. Что лучше всего описывает делегат приложения?Как это вписывается в общую концепцию?

Делегат приложения является делегатом приложения.Это не место для хранения всего, что вы не знаете, куда еще положить.Это не место для хранения глобалов.Это делегат для объекта UIApplication.Таким образом, это правильное место для размещения кода, связанного с запуском приложения, завершением, переключением в фоновый режим и т. Д. И т. Д. Что связано с тем, как приложение вписывается в ОС.

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

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

3 голосов
/ 09 февраля 2012

Технически вы могли бы это сделать. С точки зрения практики программирования, нет. Как только вы добавите много вещей в appDelegate, оно станет очень грязным. Мой совет будет оставить это в покое.

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

Надеюсь, это поможет.

3 голосов
/ 09 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...