Я инкапсулирую состояние моих контроллеров в дополнительный объект состояния.Поэтому в контроллере обычно есть ivars для элементов GUI и ссылка на этот объект состояния.
Объекты состояния обрабатываются объектом StateManager в моем делегате.Таким образом, вместо того, чтобы контроллер ссылался на другой контроллер и устанавливал переменные напрямую, все изменения проходили через этот менеджер.Немного больше работы, но гораздо меньше грязи.
Любой класс может получить состояние любого другого контроллера и изменить его.Это цель некоторых контроллеров (например: выбор видео с YouTube происходит на выделенном контроллере).Но обычно это только один класс, получающий состояние для отправки следующего контроллера с помощью initWithState :.Затем выдвинутый контроллер применяет состояние к своему графическому интерфейсу в viewDidLoad или изменяет этот объект состояния, переданный из предыдущего класса.
StateManager хранит словарь всех объектов состояния.Я сохраняю свет на графике объекта состояния, например: я сохраняю ссылку на изображение, но не само изображение.Настоящая проблема приложения - в Core Data, я использую все это только для обработки состояния графического интерфейса.StateManager прослушивает событие отставки приложения и сохраняет словарь состояний на диск с помощью NSCoding.Ивары объекта состояния всегда равны нулю или имеют какое-то значимое значение, без висячих указателей.
Я работаю над своим вторым приложением для iPhone, и это, кажется, работает, но мне также интересно, как это делают другие люди.Любые входные данные приветствуются.