在视图之间传递数据的最有效方法

时间:2013-01-16 03:28:29

标签: objective-c

假设我需要将某些数据(如数组)保存到NSUserDefaults。

如果我需要从我的应用中的不同位置访问该数据,将它从视图控制器传递到视图控制器是否更有效,或者每次需要时将其从NSUserDefaults中拉出来?

请记住,我需要保存它,因此可以减少保存数据所需的开销。基本上,创建和设置ivar或从NSUserDefaults加载数据是否有更多的开销?

2 个答案:

答案 0 :(得分:5)

我总是喜欢创建一个单例对象,可以从应用程序的任何位置访问该对象以保存此类信息。比如说你创建了一个名为DataStore的类。像这样创建一个类方法sharedDataStore

@implementation DataStore

static DataStore *sharedGameStore_ = nil;

+ (DataStore *)sharedDataStore {
    if (sharedDataStore_ != nil) return sharedDataStore_;
    static dispatch_once_t pred;        
    dispatch_once(&pred, ^{             
        sharedDataStore_ = [[DataStore alloc] init];
    });
    return sharedDataStore_;
}

在数据存储类的init方法中,您可以进行所有设置,请阅读NSUserDefaults您拥有的内容。然后添加用于读取/写入您需要使用的数据的属性和/或方法,您可以确保它被正确缓存等多次读取。

然后,您可以在应用中的任何位置添加.h文件并致电:

[DataStore sharedDataStore] someMethodName]

并确保您集中有效地阅读和编写数据,因为您的应用只会创建一个对象实例。

答案 1 :(得分:0)

  

我总是喜欢创建一个单例对象,可以从应用程序的任何位置访问该对象来保存这类信息。

我想在this应用内购买教程中有一个例子是RageIAPHelper。