【问题标题】:Alternative to using a Singleton or AppDelegate for global data storage替代使用 Singleton 或 AppDelegate 进行全局数据存储
【发布时间】:2015-01-27 21:16:58
【问题描述】:

我有一个应用需要访问一组无法存储在磁盘上的用户数据。我过去的典型方法是创建一个单例来保存这些数据,每个属性都有一个并发队列,以使数据读/写线程安全。

我想知道是否有一种方法可以在不使用单例或在我的 AppDelegate 中存储对我的用户数据的引用的情况下做到这一点。

【问题讨论】:

  • 你有什么反对写入文件的?你对单身有什么看法?
  • 出于安全原因,要求之一是不将数据保存到磁盘。
  • @Rob 我试图避免使用全局可访问的数据。试图想出一种使用 DI 的方法。也许像 Typhoon 这样的框架会起作用。
  • @rob Ian MacDonald 问我反对将内容写入磁盘的原因。

标签: ios objective-c singleton solid-principles


【解决方案1】:

NSUserDefaults 听起来像您正在寻找的。根据Apple's documentation,“NSUserDefaults 类提供了一个与默认系统交互的编程接口。默认系统允许应用程序自定义其行为以匹配用户的偏好。”您可以以全局方式使用 NSUserDefaults。

为此,您需要先创建一个 NSUserDefaults 对象:

NSUserDefaults *myAppDefaults = [NSUserDefaults myAppDefaults];

要将数据保存到默认系统,您可以执行类似于以下行的操作:

[standardDefaults setObject:@"Smith" forKey:@"lastName"];

最后,您可以通过将数据存储在变量中来从默认系统中检索数据。下面的行显示了如何将 NSString 设置为您最初存储的值:

NSString *lastName = [standardDefaults stringForKey:@"lastName"];

【讨论】:

  • 这比单例更好吗?如果有的话,那就更糟了。它没有解决单身人士可能遇到的问题,而只是引入了一堆其他问题。
  • 另外,我无法将用户信息存储到磁盘。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多