Решение, которое я рассматриваю:
Я планирую создать несколько «служебных» классов (например, GameDataUtil, AppStateUtil, GadgetsUtil), каждый из которых инкапсулирует собственное подмножество «глобальной» информации и / или методов. Каждый View или ViewController, которому требуется доступ к общей информации / методам в утилите, будет иметь соответствующее свойство данного типа (например, представление, которое может создавать звук, требует доступа к AppStateUtil, чтобы он мог определить, отключены ли звуки в данный момент) .
ApplicationDelegate будет единственным классом, который генерирует единичные экземпляры "служебных" классов и передает эти экземпляры соответствующим объектам, загружаемым из его Nib (в applicationDidFinishLaunching). Эти представления / контроллеры должны будут передать всю необходимую информацию любому из своих членов, который они могут загрузить программно (что может стать проблематичным - класс A может нуждаться в GagetsUtil для передачи его экземпляру класса B, даже если класс A никогда не будет использует утилиту напрямую).
Это похоже на внедрение зависимостей от делегата приложения вниз (поскольку у меня нет утилиты Dependency Injection Container).
Теперь я подумал о создании uber-утилиты (например, ConfigUtil), которая бы содержала одно свойство для каждой из других утилит. AppDelegate создаст один экземпляр утилиты uber (настроив его вместе с экземплярами других утилит, которые он создаст). AppDelegate будет передавать экземпляр Uber-утилиты любому, кому нужен доступ к любой из базовых утилит. Каждая базовая утилита все еще инкапсулирует подмножество общих данных / методов, но, помещая одну из них в uber-утилиту и передавая ее, мне не нужно идти в ногу с тем, какая утилита необходима для какого класса ( не только для собственного использования, но и для передачи любому из объектов-членов).
Есть какие-нибудь мысли или предложения по этому плану? Заранее большое спасибо!