我非常广泛地使用 NSUserDefaults。我在 NSUserDefaults 中保存了许多关于用户的信息数组,并稍后在另一个视图中使用它们。
我的问题是,这是错误的方法吗?或者这可能是发送到 AppStore 的问题?
谢谢..
我非常广泛地使用 NSUserDefaults。我在 NSUserDefaults 中保存了许多关于用户的信息数组,并稍后在另一个视图中使用它们。
我的问题是,这是错误的方法吗?或者这可能是发送到 AppStore 的问题?
谢谢..
关于可以在 NSUserDefaults 中存储什么或多少信息没有硬性规定(除非你永远不应该存储安全数据)。除非您滥用 NSUserDefaults 导致崩溃,否则您肯定不会被 App Store 拒绝。
不过,我对您关于在另一个视图中使用的说法感到困惑。NSUserDefaults 旨在跨会话保存少量数据,而不是在应用程序中的对象之间传输数据。如果您将它用于后者,您应该重新审视您的应用程序架构。
是的,这是一种错误的方法,但我认为当您将其发送到 AppStore 时,这不会对您造成问题。
您可能需要做的是添加一些配置文件并进行管理,或者在您的项目中使用核心数据,以便仅在了解您的项目时为您提供更准确的答案。
此致。
编辑以在使用 NSUserDefaults 时添加更好的解释
您只想使用 NSUserDefaults 来存储配置,这将是用户的默认设置,例如用户最喜欢的背景颜色。
你不想在 NSUserDefaults 中存储密码、临时信息,如果你在做游戏,你就不会在那里存储你的排名之类的东西。
来自苹果文档
NSUserDefaults 类提供了一个与默认系统交互的编程接口。默认系统允许应用程序自定义其行为以匹配用户的偏好。例如,您可以允许用户确定应用程序显示的测量单位或自动保存文档的频率。应用程序通过将值分配给用户默认数据库中的一组参数来记录这些偏好。这些参数被称为默认值,因为它们通常用于确定应用程序在启动时的默认状态或其默认行为方式。
你不会被 App Store 拒绝,但这并不是一个很好的做法。考虑使用“核心数据”来存储结果和值。NSNotifications
并且很少NSUserDefaults
用于视图控制器之间的通信。
如果您NSUserDefaults
主要用于不同 VC 之间的通信,我建议使用Delegates
(消息传递(或)回调)
最好不要在 userdefaults 中保存太多数据。相反,您可以使用 plist 或 Core Data 来存储您的数据(这是一个很好的 Core Data 教程)。而且 NSUSerDefaults 也很难更改和删除对象,所以尽量使用它来存储用户名和密码等。
这是一个有用的线程。本质上,转到您的项目文件夹并查看 pList 文件大小。
我发现有帮助的回复是转到您的项目文件并查看 plist 文件大小:
5个对象几乎没有。你会没事的!
在我的机器上,我的用户默认值中有大约 28 兆的数据。这根本不会引起任何问题。
根据数组的一般编程经验,我猜当您达到 1000 个时,性能开始迅速下降,具体取决于元素大小。因此,在一个程序中,我不会有存储几百个元素的问题。这就是说,如果我是你,我可能会尽快开始使用 sqlite3 数据库或 coredata。