假设我需要将某些数据(如数组)保存到 NSUserDefaults。
如果我需要从我的应用程序中的不同位置访问该数据,是否更有效地将其从视图控制器传递到视图控制器,或者每次需要时将其从 NSUserDefaults 中拉出?
请记住,我需要保存它,因此请忽略保存数据所涉及的开销。基本上,在创建和设置 ivar 或从 NSUserDefaults 加载数据时是否有更多开销?
假设我需要将某些数据(如数组)保存到 NSUserDefaults。
如果我需要从我的应用程序中的不同位置访问该数据,是否更有效地将其从视图控制器传递到视图控制器,或者每次需要时将其从 NSUserDefaults 中拉出?
请记住,我需要保存它,因此请忽略保存数据所涉及的开销。基本上,在创建和设置 ivar 或从 NSUserDefaults 加载数据时是否有更多开销?
我总是更喜欢创建一个可以从应用程序中的任何位置访问的单例对象来保存此类信息。例如,假设您创建了一个名为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]
并确保您集中高效地读取和写入数据,因为您的应用程序只创建对象的一个实例。
我总是更喜欢创建一个可以从应用程序中的任何位置访问的单例对象来保存此类信息。
我想一个例子是这个应用内购买教程中的 RageIAPHelper。