iOS在视图控制器之间共享“全局数据”

7

我一直将App Delegate作为“全局存储器”在各个视图控制器之间共享数据。通常我会这样做:

My_AppDelegate *appDelegate = (My_AppDelegate *)[[UIApplication sharedApplication] delegate];

然后,我会把数据放到appDelegate中,并从另一个视图控制器中获取数据。但是这种方式似乎有些笨拙和不恰当(尽管它确实起作用)。是否有更好的方法?可以在某种全局共享区域上设置一个“监听器”,如果有人在其中插入数据元素,则另一个对象将获得“回调”,以让它知道有人准备好数据了吗?在Java中,我们过去经常使用Observer/Observable类来实现此功能 - 也许在iOS中有类似或更好的东西?
1个回答

3
一个更加干净且简单的方法是创建一个单例类,例如AppData,可以通过多种方式访问,所有其他的类都可以使用它。这样做的好处在于将您的应用程序特定内容与应用委托相关内容分离开来。您可以这样定义这个类:
@interface AppData : NSObject
// 这里可能会声明一些类方法...
@end
通常我会在这种类上定义类方法,以访问设置值、应用程序特定常量或其他单例对象。有很多可能性。
最后,你可以只使用类方法完成许多工作,像这样调用:[AppData theMethod]。只要记住,在类方法中没有self可供访问。
更进一步,你可以为AppData类定义ivars,并管理一个AppData的单例实例。使用类方法,例如+sharedInstance,获取单例的句柄,然后调用方法。例如,[[AppData sharedInstance] someMethod:myArgument]。你可以在+sharedInstance方法的实现中管理单例的实际创建,并最终返回该方法。
我不确定是否称之为"最佳实践",但我发现这种模式非常方便。

是的,我忘记了单例模式,而我在Java中一直在使用它们。我会尝试一下。 - geekyaleks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接