2009-04-22 2 views
3

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

Моя дилемма:

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

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

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

^Buffalo

EDIT:

Последующие меры Вопрос: При взаимодействии с одноплодной, что лучший способ, чтобы поговорить с ней:

[[MyAwesomeSingleton sharedInstance] gimmeSomePizza]; 

или

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

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

ответ

4

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

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

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

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

+0

Последующие меры Вопрос: При взаимодействии с одноплодной, что лучший способ, чтобы поговорить с ней: [[MyAwesomeSingleton sharedInstance] gimmeSomePizza]; или MySingleton * s = [MySingleton sharedInstance]; [s gimmeSomePizza]; Я думаю, что мне интересно, вы вызываете вызов метода sharedInstance каждый раз или вы определяете указатель на sharedInstance, а затем ссылаетесь на указатель? – Buffalo

+0

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

0

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

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