如何在iOS开发中保存全局变量?
我有一个带有几个控制器的iOS应用程序,每个控制器都有自己的xib文件。
如何设置一个跨越所有控制器的范围的全局变量? 我应该每次使用NSUserDefaults
并检索每个视图的数据吗?
NSUserDefaults
适用于需要持久性的事物,即您计划在应用程序启动之间存储它们。 对于临时变量,请考虑使用单例实例 ,例如本答案中说明的MySingleton
类: https : //stackoverflow.com/a/145164/108574 。
拥有此类时,将临时变量作为此类的属性以便于访问。 当你需要访问它时,只需调用[MySingleton sharedSingleton].variable
。
另请查看: http : //cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html了解更多信息。
通常,您希望避免使用全局变量。 如果您需要访问必须共享的数据,则有两种常用方法。
将值放在AppDelegate中。
如果您只有一个或两个共享值,则AppDelegate是一种放置共享内容的简便方法。
可以从控制器访问AppDelegate:
FooApp* appDelegate = (FooApp*)[[UIApplication sharedApplication] delegate];
其中FooApp
是应用程序类的名称。
创建一个单例类。
使用大量共享值污染AppDelegate并不理想,并且/或者如果您希望这些值在会话之间持续存在,则创建由NSUserDefaults
支持的Singleton类是跨实例共享值的另一种方法。
根据您的确切需求,您可以了解并使用Singleton设计模式来创建一种可在所有视图中共享的数据库对象。 在这里阅读iOS单身人士。
这就是我在iOS应用程序中完成您所需的内容。
- 如何在iOS中添加可播放的(如wav,wmv)标题与PCM数据/缓冲区?
- UIAlertController / UIAlertView在iOS 8上滚动
- 用spritekit和UITouch绘制直线会创build多行
- 试图在我的应用程序中实现networking错误警报?
- 重新加载一个UITableView上的一个UITableViewCell
- 从块返回UIImage
- 如何将UITabBar项目从UITabBar(而不是UITabBarController)连接到IB中的不同视图?
- UINavigationController pushViewController在中途暂停/冻结
- 如何在iPhone上以编程方式启用指导访问(Kiosk模式)?