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

Jus*_*and 6 objective-c ios

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

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

Ala*_*lan 10

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

将值放在AppDelegate中.

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

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

FooApp* appDelegate = (FooApp*)[[UIApplication sharedApplication] delegate];
Run Code Online (Sandbox Code Playgroud)

FooApp应用程序类的名称在哪里.

创建一个单例类.

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


He *_*ing 7

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

当您拥有此类时,请将您的临时变量放在property此类中以便于访问.当你需要访问它时,只需打电话[MySingleton sharedSingleton].variable.

另请查看:http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html了解更多信息.