iOS:使用应用程序委托来存放全局variables

这是不好的做法,以保存我想要从应用程序委托中的所有类访问的variables,并通过[[UIApplication sharedApplication] delegate] someProperty]

你的问题的真正的解决办法不是用另一种(即单身人士)取代一种forms的全球国家。

你应该做的是将状态放在你的应用程序委托中实例化的“模型”类中,然后将它们传递给需要它们的应用程序部分(例如视图控制器),从而完全消除你的全局状态问题。

以这种方式加载AppDelegate作为应用程序范围variables的容器通常不是一个好习惯。 它可以很快变得笨拙。

通常的做法是定义一些单例对象,如下所示:

 + (instancetype)shared { static dispatch_once_t onceToken; static MyServiceClient* instance; dispatch_once(&onceToken, ^ //Use GCD to make a singleton with thread-safety { instance = [[self alloc] init]; }); return instance; } 

然后,可以将这些对象作为参数提供给需要它们作为协作者的类。

使用dependency injection

请注意,虽然这个单身人士可以被认为是反模式 。 如果你将这些单例注入到需要它们的类中,那么这个单例并不算太坏,但是绝对不build议将它们连接起来(不幸的是,这也是常见的做法),因为这会促进过于紧密的耦合,内聚并且需要复杂的调整才能执行unit testing。

另一种方法是使用dependency injection,在这种情况下,对象在大多数情况下甚至不需要单例。 您可以实例化一个给定用例的协作组件的对象图,该用例将根据需要来来去去。 这有利于在资源受限的设备上使用更less的内存。

它是一个常见的误解,你需要一个库来使用dependency injection。 你没有。 它虽然可以帮助。 我创build了一个名为Typhoon的dependency injection容器。

通知

实现类之间松散协作的另一种方式是使用通知 。