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]);
- 如何设置NSUserDefault键的初始值?
- NSUserDefaults是否通过更新Appstore中的应用程序?
- NSUserDefaults同步的最佳实践
- 使用xcode 8将swift 3中的userdefaults保存字典
- 我应该使用NSUserDefaults还是plist来存储数据?
- NSUserDefaults无法在Watch OS2上使用Xcode beta
- 为什么NSUserDefaults无法在iPhone SDK中保存NSMutableDictionary?
- 如何在NSUserDefaults中保存NSMutablearray
- 在iOS中相当于Android的NSUserDefaults