这可能是一个经验丰富的iOS开发人员的根本问题,但来自
Java背景,我们有很多依赖注入(DI)的好东西(即Spring),我有一些麻烦,找出谁应该拥有DI对象.不幸的是,我发现自己创造了一大堆Singleton,它变得非常讨厌的管理.
例如,我们有一些其他类想要访问的配置.目前我们只有一个配置的单例实例,这使得测试有点困难.从技术上讲,我们使用OCMock中的方法来克服这个问题.
在Java / Spring中,有一些容器创建/拥有这些对象.在iOS中,我认为与容器最近的东西是UIApplication和UIApplicationDelegate.这些东西创建/拥有这些对象将最终被注入到其他对象中是否有意义?
如果是这样,访问这些对象的策略是什么?例如,在UIApplication或UIApplicationDelegate上创建一个类别来访问这些对象,如:
[[UIApplication sharedApplication] configuration]或[[[UIApplication sharedApplication] delegate]配置]
解决方法
事实上,DI似乎并不像人们通常在iOS中使用的东西,就像我们在Java或C#中一样.
就个人而言,我倾向于创建我自己的名为Application的单例,其中包含应用程序的所有服务和信息.这样我就可以简单的获得一个简单的单例,而不是专门安装iOS(即使obj-c几乎不能在其他任何地方使用).所以在我的应用程序,我通常有:
[[Application sharedInstance] configuration] [[Application sharedInstance] authService]
所以唯一需要单个的类是Application一(与UIApplication无关),它创建init方法中的所有服务.