2011-12-19 61 views
0

我一直使用应用程序委托接口变量通过我的应用程序来快速访问应用程序的宽数据位。Obj-C,我应该如何使用NSUserDefaults轻松/高效地访问整个应用程序/视图的设置?

我相信这是导致我的应用程序效率问题。我终于决定转移到NSUserDefaults。除非你有其他建议吗?

通常我会希望通过一个视图访问同一个变量,因此每次使用NSUserDefaults访问此变量都没有意义。我认为它会很慢。

所以我在想一个类将读取所有的值到一个类型的数组中,在viewDidLoad中,然后如果一个值被改变,保存/同步和更新类变量。

但是,如果我推到一个视图,我想我将不得不保存。

这听起来有点乱。

但是,我只是想知道什么方法将是高效和易于使用?

+1

它不慢访问'NSUserDefaults',它只是一个'NSDictionary'即自动保存每两秒钟。因此,继续使用'NSUserDefaults'而不是缓存值是很好的。 – 2011-12-19 19:32:15

+0

我怀疑NSUserDefaults的使用在应用程式产生任何效率问题。您可以在从一个视图控制器转换到另一个视图控制器的时间内,从默认存储区添加/读取数千个值。你有没有分析你的应用程序,看看瓶颈在哪里? – kubi 2011-12-19 21:29:11

回答

0

这实际上取决于您访问的数据的大小。将多个NSDictionary对象序列化到磁盘可能足以导致您的应用程序滞后。

如果您对iOS开发非常认真,您应该学会使用Core Data。任何NSUserDefaults可以做的事情,核心数据都会更好。 NSUserDefaults提供的唯一优势是减少了一次性应用程序中的代码行。考虑核心数据就像为房子奠定基础,而NSUserDefaults喜欢搭建帐篷。

+0

难道是确定的,如果我创建像...'+(无效)的一些功能storeSetting:(的NSString *)设置:(的NSString *)值;'和'+(的NSString *)retrunSetting:(的NSString *)设置;' ? – Jules 2011-12-19 20:12:35

0

如果你需要使用像数组或者集合这样的变量,你最好不要使用NSUserDefaults,因为在同步时它们将所有存储值保存到磁盘上(当然如果你不需要将它们存储到磁盘上的话)。如果你需要大量的对象图数据的存储与这样的

User 
-name 
-lastname 
-email 
-messages 
Message 
-date 
-text 

关系那你最好开始寻找到CoreData框架,它是非常容易使用,可以储存大量的数据集磁盘和访问他们很快。

如果你只需要一些类,例如存储当前的用户配置文件值,如用户名,电子邮件等。尝试创建一个单例类 - 这与使用AppDelegate非常相似,但是当你使用它时会更清晰将你的数据分成更小的块。

反正我根据我的假设只写了这个答案。很高兴知道您正在使用的数据类型以及您的应用程序的生命周期是什么。

1

共享模型对象(使用MVC范例)是将变量共享给多个其他对象或类的常用推荐方法。这个Model对象可以是一个单例,或者其他对象可以在本地复制或委派一个对单个Model对象的引用,以便快速访问其getter/setter。

最快的变量访问方法通常只是使用C全局变量(因为常规C是Objective C的一个子集),如果你愿意处理可能更困难的代码重用和调试问题。

NSUserDefaults只是使用文件系统作为键值字典全局变量。慢,并且与C全局变量使用相同的结构问题。

相关问题