我在哪里保存NSUserDefaults

时间:2015-05-22 00:59:15

标签: ios objective-c nsuserdefaults

我看过无数使用NSUserDefaults保存整数的例子,但没有一个显示我保存和加载它们的位置。

我在哪里放置代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:9001 forKey:@"HighScore"];
[defaults synchronize];

在? 我把它放在viewDidLoad中吗?

2 个答案:

答案 0 :(得分:1)

这取决于您的应用的要求。可能有多种情况,

  1. 您要将数据重复保存到NSUserDefaults您可能希望暂时保存数据一段时间,因为如果重复保存到NSUserDefaults,则需要确定将数据保存到NSUserDefaults的最佳时间。
  2.   

    例如:       您正在存储用户的在线/离线状态,并在1秒后反复检查,并保存到NSUserDefaults,这是非常的   即使在性能和电池消耗方面,也是昂贵的过程。   所以,你可能想继续保存部分,然后保存你的   数据到- (void)applicationWillResignActive:(UIApplication *)application或其他一些适当的appDelegate方法。这样,您的数据将被正确保存,而无需太多电池   消费和影响表现。

    1. 您正在为NSUserDefaults保存一个巨大的列表(您不应该这样做)嗯, 这种情况很棘手,所有开发人员都会说你不应该将大量数据保存到NSUserDefaults,而是使用其他东西作为数据库,而不是NSUserDefaults。但是,如果您仍然不相信,您应该在访问数据后立即使用[[NSUserDefaults standardUserDefaults] synchronize],或者在[[NSUserDefaults standardUserDefaults] setObject:@"OBJECT" forKey:@"KEY"]
    2. 之后立即使用NSUserDefaults
        

      在我看来,保存所有- (void)applicationWillResignActive:(UIApplication *)application数据的最佳位置是NSUserDefaults。至   明白看看这个例子,

           

      您在应用中保存到void arraySum(int* sum, const int* a, const int* b, int rows, int cols) { for (int i = 0; i < rows*cols; i++) sum[i] = a[i] + b[i]; } int a[2][3] = ...; int b[2][3] = ...; int c[2][3]; arraySum((int*)c, (const int*)a, (const int*)b, 2, 3); 5次,然后让我们   假设执行需要0.0001秒并且需要0.0001%的电池   消费。总计,执行需要0.0001 * 5 = 0.0005秒   和0.0001 * 5 = 0.0005%的电池。

           

      但是,如果你只做一次,它只需要0.0001-0.0002   秒(只是假设)执行和0.0001%-0.0002%电池   消耗。

答案 1 :(得分:0)

您可以保存变量并从NSUserDefaults中随处读取它。您可以将其保存在AppDelegate或ViewDidAppear中,无论您喜欢什么。

请记住,NSUserDefault就像是一个本地缓存,可以保存一些变量,所以当用户杀死你的应用程序或从后台重新启动它时,你可以从中读取一些数据,并知道它暂停的应用程序状态或者停止。

但是,不要滥用它。它应该只保存一些轻量级数据,例如上次刷新时间,用户名,访问令牌等