NSUserDefaults removeObjectForKey与setObject:nil

以下两行是否相同?

1. [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"example key"]

2. [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"example key"]

Swift 3.0

当我testing这个时,下面的答案不再是这种情况。 当设置nil ,结果是存储NSCFData。 可能是一个NSNull对象引用,但我不积极。

要彻底删除某个键的值,请使用UserDefaults.standard.removeObject(forKey: "YourDefault")

我testing了下面的代码:

 UserDefaults.standard.set(["a", "b", "c"], forKey: "MyDefaults") print("Test A: My saved defaults \(UserDefaults.standard.object(forKey: "MyDefaults"))") UserDefaults.standard.set(nil, forKey: "MyDefaults") print("Test B: My defaults set to nil \(UserDefaults.standard.object(forKey: "MyDefaults"))") UserDefaults.standard.removeObject(forKey: "MyDefaults") print("Test C: My defaults removed \(UserDefaults.standard.object(forKey: "MyDefaults"))") 

是的,这两行代码是等价的,都会导致零读

  id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"]; 

如果没有find密钥, NSUserDefaults将返回nil。 我会build议使用removeObjectForKey而不是将其设置为nil。

这里是如何testing如果设置键值为零从NSUserDefaults standardUserDefaults删除键入口。

 NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] copy]; for(NSString *key in keys) { NSLog(@"Key Name: %@", key); } [keys release]; 

或者简单地转储NSUserDefaults standardUserDefaults的键/值字典

 NSLog(@"All contents of NSUserDefaults: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);