Это, вероятно, фундаментальный вопрос для опытного разработчика iOS, но, исходя из фона Java, в котором у нас много положительных эффектов Dependency Injection (DI) (т.е. Spring), у меня возникли проблемы с выяснением того, кто должен владеть объекты DI. К сожалению, я нахожу, что создаю группу синглтонов, которая становится довольно неприятной для управления.
Например, мы имеем несколько Configuration
, к которым хотели бы обращаться другие классы. В настоящее время у нас есть только один экземпляр конфигурации для конфигурации, что затрудняет тестирование. Технически мы преодолеваем эту проблему, используя метод swizzling в OCMock.
В Java/ Spring существует некоторый контейнер, который создает/владеет этими объектами. В iOS я думаю, что ближайшими вещами, которые у меня есть к контейнеру, являются UIApplication и UIApplicationDelegate. Имеет ли смысл эти вещи создавать/владеть этими объектами, которые в конечном итоге будут введены в другие объекты?
Если да, то какая подходящая стратегия для доступа к этим объектам? Например, создайте категорию в UIApplication или UIApplicationDelegate для доступа к этим объектам, таким как:
[[UIApplication sharedApplication] configuration]
или [[[UIApplication sharedApplication] delegate] configuration]