使用NSUserDefaults太多了

时间:2012-04-10 15:36:03

标签: iphone objective-c ios nsuserdefaults

我非常广泛地使用NSUserDefaults。我在NSUserDefaults中保存了许多关于用户的信息数组,并在以后的另一个视图中使用它们。

我的问题是,这是一种错误的做法吗?或者这可能是发送到AppStore的问题?

谢谢..

5 个答案:

答案 0 :(得分:4)

关于NSUserDefaults中可存储的信息数量或数量,没有严格的规则(除非您永远不应存储安全数据)。除非你滥用NSUserDefaults到导致崩溃的程度,否则你肯定不会被App Store拒绝。

但是,我对你在另一个视图中使用的声明感到困惑。 NSUserDefaults旨在跨会话保留少量数据,而不是在应用程序中的对象之间传输数据。如果您将它用于后者,则应重新访问应用程序体系结构。

答案 1 :(得分:3)

是的,这是一种错误的方法,但我不相信当您将其发送到AppStore时,这可能是一个问题。

你可能需要做的就是添加一些配置文件,然后你可以管理它,或者在你的项目中使用核心数据,只有知道你的项目才能得到更准确的答案。

最好的问候。

编辑以在使用NSUserDefaults时添加更好的解释

您只想使用NSUserDefaults存储默认为用户的配置,例如用户喜欢的背景颜色。

您不希望存储NSUserDefaults,密码,临时信息,如果您正在进行游戏,则不会存储您的排名等等。

来自apple doc

  

NSUserDefaults类为其提供编程接口   与默认系统交互。默认系统允许   应用程序以自定义其行为以匹配用户的首选项。   例如,您可以允许用户确定哪些单位   测量您的应用程序显示或文档的频率   自动保存。应用程序通过分配记录此类首选项   值为用户默认数据库中的一组参数。该   参数被称为默认值,因为它们是常用的   确定应用程序在启动时的默认状态或其行为方式   默认情况下。

答案 2 :(得分:1)

不希望在userdefaults中保存太多数据。您可以使用plist或Core Data来存储数据(this is a good Core Data Tutorial)。并且NSUSerDefaults很难更改和删除对象,因此尽量使用它来存储用户名和密码等。

答案 3 :(得分:1)

你不会从App Store中被拒绝,但它的不是很好的做法来做到这一点。考虑使用“核心数据”来存储结果和值。并且很少NSNotificationsNSUserDefaults用于viewControllers之间的通信。

如果您使用NSUserDefaults主要用于不同VC之间的通信,我建议使用Delegates(消息传递(或)回拨)

答案 4 :(得分:0)

这是一个有用的thread。基本上,转到项目文件夹并查看pList文件大小。

我发现有帮助的回复是转到您的项目文件并查看plist文件大小:

  

5个对象几乎没有。你没事!

  

在我的机器上,我的用户默认值中有大约28兆的数据。这根本不会造成任何问题。

  

从数组的一般编程经验来看,当你进入1000时,我会猜测性能开始迅速衰减,具体取决于元素大小。因此,在程序中,我不会存在存储几百个元素的问题。这说我可能会开始使用sqlite3数据库或coredata,如果我是你的话,应该尽快而不是以后。