-[NSUserDefaults registerDefaults:] 是附加的并且它会覆盖值吗?

Is -[NSUserDefaults registerDefaults:] additive and does it overwrite values?

换句话说,我必须只在我的应用程序的一个位置调用 registerDefaults(例如,当它启动时),还是我可以根据需要注册默认值?

如果它是累加的,当我尝试覆盖一个值时会发生什么?

例如,给定以下代码...

[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"a": @1}];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"b": @2}];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"b": @3}];

...最终的默认字典是什么?

  1. @{@"b": @3}(替换)
  2. @{@"a": @1, @"b": @3}(加法,覆盖值)
  3. @{@"a": @1, @"b": @2}(加法,不要覆盖值)
  4. 崩溃,因为@"b" 已经定义。
  1. 加法覆盖值。

示例:

[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"a": @1}];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"b": @2}];
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"b": @3}];
NSAssert([[NSUserDefaults standardUserDefaults] integerForKey:@"a"] == 1, @"");
NSAssert([[NSUserDefaults standardUserDefaults] integerForKey:@"b"] == 3, @"");

终极词典是:

@{@"a": @1, @"b": @3}

因此,您可以根据需要多次调用它。

来自documentation

Adds the contents of the specified dictionary to the registration domain.