Кажется, что вы можете столкнуться с проблемой чрезмерного использования синглтонов для управления контроллерами, которым не нужны синглтоны. Это может быть полезно:
Я недавно переработан всю свою программу из одноэлементных пропусканием объектов по мере их необходимости. Обратите внимание, что однопользовательские и общие глобальные объекты не идентичны, а собственные классы Apple используют sharedObject
или defaultObject
, который создает экземпляр и возвращает общий экземпляр, но ничто не мешает вам создать другой экземпляр класса для ваших собственных нужд.
Singleton, с другой стороны, ограничивает объект одним экземпляром, и это означает отказ от возможности иметь два экземпляра (которые могут понадобиться в будущем) для обеспечения полного доступа из любого места. В этом смысле вам действительно нужна только общая часть доступа, а не ограничение одного экземпляра, поэтому вы можете рассмотреть шаблон sharedObject
. Вот пример:
// Up the top in the .m file
static MySharedClass *sharedInstance;
// A class method to return the shared instance
+ (MySharedClass *)sharedInstance {
if (!sharedInstance) {
sharedInstance = [[MySharedClass alloc] init];
}
return sharedInstance;
}
Сказав это, я хотел бы рассмотреть структурирование программы для передачи объектов, поскольку они необходимы, а не создание все глобально для доступа всем. В противном случае код, который вы пишете при чрезмерном использовании одноточечных/глобальных объектов, гораздо более сложен и не может быть вырван из текущего проекта и использован в другом месте, что затрудняет отладку, поскольку вам необходимо учитывать глобальное состояние этих классов менеджера.
Я бы создал свой главный контроллер (ViewController), который затем создаст экземпляр других классов контроллеров и передаст ресурсы между ними. Этот NSArray из UIViews, который вы упомянули, будет храниться как можно больше в цепочке, по мере необходимости, по-видимому, вверху. Затем этот презентатор создавал LayoutManager и передавал ему необходимые объекты для дальнейшей работы. И таким же образом я передал бы эти объекты в BlockManager и ColorManager.
Я не думал об использовании делегатов в этом смысле и оставил массив в контроллере представления. Я попробую это. Я предполагаю, что класс, который должен управлять всем в представлении, является ViewController, поэтому логически это имеет смысл. – jadengeller