如何在iOS开发中保存全局变量?

时间:2012-04-01 00:44:10

标签: objective-c ios

我有一个带有多个控制器的iOS应用程序,每个控制器都有自己的xib文件。

如何设置一个跨越所有控制器的范围的全局变量?我应该每次使用NSUserDefaults并为每个视图检索数据吗?

3 个答案:

答案 0 :(得分:10)

通常,您希望避免使用全局变量。如果您需要访问必须共享的数据,则有两种常用方法。

将值放入AppDelegate。

如果您只有一个或两个共享值,AppDelegate是一种放置共享内容的简便方法。

可以从您的控制器访问AppDelegate:

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

其中FooApp是您的应用程序类的名称。

创建一个单例类。

使用大量共享值对AppDelegate进行污染并不理想,并且/或者如果您希望这些值在会话之间保持不变,请创建由NSUserDefaults支持的Singleton类 是跨实例共享值的另一种方法。

答案 1 :(得分:7)

NSUserDefaults用于需要持久性的内容,即您计划在应用启动之间存储它们。对于临时变量,请考虑使用单例实例,例如此答案中说明的MySingleton类:https://stackoverflow.com/a/145164/108574

当您拥有此类时,请将临时变量设置为此类的property以便于访问。当您需要访问它时,只需致电[MySingleton sharedSingleton].variable

另请查看此处:http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html了解详情。

答案 2 :(得分:2)

根据您的确切需求,您可以了解并使用Singleton设计模式来创建一种可在所有视图中共享的数据库对象。了解iOS单身人士here

这就是我在iOS应用程序中完成您所需的内容。