Дизайн приложений и AppDelegate - PullRequest
4 голосов
/ 22 апреля 2009

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

Моя дилемма:

Мое приложение загружает представление (v1), где по нажатию кнопки пользователя класс контроллера v1 выполняет метод действия. Этот метод действия должен заполнить массив объектами. После этого пользователь либо снова выполнит действие, либо перейдет на другую вкладку, чтобы загрузить другое представление. Другие представления в приложении будут использовать заполненный массив v1.

Итак, где должен быть объявлен этот общий массив? Прямо сейчас это класс AppDelegate с того времени, когда я тестировал функции без графического интерфейса. Должен ли я взять синглтон AppDelegate и добавить в него элементы в v1ViewController? Должен ли он быть объявлен как статический?

Спасибо за помощь!

^ Buffalo

EDIT:

Дополнительный вопрос: при взаимодействии с одноэлементным способом лучше всего с ним поговорить:

[[MyAwesomeSingleton sharedInstance] gimmeSomePizza]; 

или

MySingleton *s = [MySingleton sharedInstance]; 
[s gimmeSomePizza]; 

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

Ответы [ 2 ]

5 голосов
/ 22 апреля 2009

Использование приложения-делегата для хранения данных, которые совместно используются представлениями и контроллерами представления, является разумным и целесообразным.

В моих приложениях я рассматриваю делегат приложения как часть контроллера MVC, причем UIViews и контроллеры представления являются частью «представления». Я предпочитаю использовать вариант MVC под названием Passive View , в котором части модели и вида приложения строго отделены друг от друга только соединяющим их контроллером.

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

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

0 голосов
/ 22 апреля 2009

Вы можете сохранить его в ivar в приложении-делегате. Вам не нужно делать его статичным, поскольку делегат приложения в любом случае является единичным (не более 1 экземпляра).

Если делегат приложения становится немного сложнее, вы можете выделить хранилище данных в отдельный объект модели или, возможно, использовать Core Data.

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