Для собственного использования я создал некую конструкцию MVC. У меня есть DataManager (одноэлементный), который содержит все необходимые данные (в основном представлены в моделях; простые NSObjects) в массивах или словарях.
Представления (Nib-файлы и ViewControllers) обращаются к DataManager для получения их данных с помощью функций get. Если данные уже присутствуют в DataManager, он возвращает данные (посредством уведомления). Если не; он переадресует вызов контроллеру, который затем получает его.
В этом контроллере я разделяю вызов в автономном / онлайн-режиме (возможно, это не важно для вас), когда в режиме онлайн вызов является запросом XML, а если в автономном режиме - вызовом базы данных SQLite.
Контроллер затем может установить данные в DataManager и отправить уведомление в представление.
Затем цикл начинается снова, где представление может получить доступ к данным через DataManager.
Все это происходит при асинхронных вызовах, отсюда и уведомления (если бы я позволил DataManager или Controllers связываться с представлениями, это не было бы поточно-ориентированным).
Мой AppDelegate выполняет только самую первую инициализацию основного представления, контроллеров и DataManager, а затем они вступают во владение.
Хорошо иметь ваши модели (данные) в центральном месте, чтобы вы могли легко получить к ним доступ во всех классах, не создавая большого количества зависимостей классов.
Я также разделил большинство типов функций на отдельные классы, такие как DataManager для данных, DownloadManager для асинхронизированных URL-запросов, анализатор XML, фабрика для построения моделей из NSDictionaries, DatabaseConnector и т. Д. И т. Д.