我有一个带有多个控制器的iOS应用程序,每个控制器都有自己的xib文件。
如何设置一个跨越所有控制器的范围的全局变量?我应该每次使用NSUserDefaults
并为每个视图检索数据吗?
答案 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)