2010-11-03 2 views
2

Я играю с разработкой iOS, и я добираюсь до сцены, где хочу создать что-то помимо простого приложения. Однако я не уверен, что понимаю, как правильно разбить приложение.iOS Разбиение приложений/MVC

Для простоты представьте себе (очень) простое приложение для аудиоплеера. Допустим, есть два контроллера представлений, доступных через UITabBarController, который создавал основной класс AppDelegate.

Каждые из этих контроллеров зрения имеет следующую ответственность:

  1. PlayerViewController - звук игрок, который играет «текущий» звуковой сэмпл, когда пользователь нажимает кнопку.

  2. SelectorViewController - Селектор выборок, который использует UIPickerView для отображения доступных аудиокассет, чтобы пользователь мог выбрать, какой образец они хотят воспроизвести.

Пока что так хорошо. Однако я не совсем понимаю, где я должен хранить данные на доступных выборках, так что обе точки зрения могут узнать информацию о доступных выборках, запустить образец для воспроизведения и т. Д.

Как обе диспетчеры представлений должны получить доступ к этой информации о «уровне модели», создав «одноуровневый» класс «аудио-менеджер», будет разумным подходом или есть (намного, гораздо более вероятно, я угадываю), лучшее средство для решения этой проблемы, м с видом.

Любые указатели будут очень признательны.

ответ

3

Я использовал этот шаблон (Singleton data manager) несколько раз в серьезных приложениях. Это довольно просто, легко понять, прост в использовании, хотя этот шаблон презирают пуристы ООП.

Если никто не говорит вам, что неправильно использовать синглтон, не забудьте проверить документацию Apple на рекомендуемую реализацию (существует множество способов перегрузки).

О, и BTW, Apple использует его в SDK iOS, поэтому это обычная практика (см. Методы класса, начинающиеся с «shared»).

UPDATE:

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

+0

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

+0

О, я ничего не заметил. Зачем вам нужно получить доступ ко всему хранилищу данных в режиме просмотра плеера? Он должен иметь только текущий файл, не так ли? – jv42

+0

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

0

Если источник ваших данных находится на удаленном сервере, и он входит в ваше приложение в виде XML-файла, вы также можете получить его, когда захотите, с каким-то исходным загрузчиком.

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

Другим способом достижения этого более тщательного использования памяти является получение данных из базы данных sqlite с использованием Core Data. Но некоторые люди думают, что это слишком сложно для простого приложения и предпочитают запускать запросы вручную.

+0

Все эти вещи верны. Полностью не связан с вопросом, но это правда. :-) –

+0

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

Смежные вопросы