Возможно, вы столкнулись с проблемой чрезмерного использования Singletons для управления контроллерами, которые не обязательно должны быть Singletons.Это может быть полезно:
Недавно я переработал всю свою программу от синглтона до передачи объектов по мере необходимости.Обратите внимание, что одноэлементные и совместно используемые глобальные объекты не идентичны, и собственные классы Apple используют sharedObject
или defaultObject
, который создает экземпляр и возвращает общий экземпляр, но ничто не мешает вам фактически создать другой экземпляр класса для ваших собственных нужд.
Синглтон, с другой стороны, ограничивает объект одним экземпляром, и это означает отказ от возможности иметь два экземпляра (которые могут потребоваться в будущем) для получения полного доступа из любого места.В этом смысле вам действительно нужна только общая часть доступа, а не ограничение одного экземпляра, поэтому вы можете рассмотреть шаблон 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 of UIViews будет храниться в цепочке настолько высоко, насколько это необходимо, предположительно, в самом верху.Затем этот Presenter создаст LayoutManager и передаст ему необходимые объекты для дальнейшей работы.И таким же образом я бы передавал эти объекты в BlockManager и ColorManager.