NSUserDefaults是單例類。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSUserDefaults的用法:
1. 存
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setBool:YES forKey:@"isLogin"];
[userDefaults setObject:@"15288888888" forKey:@"phoneNumber"];
[userDefaults synchronize];
synchronize的作用:NSUserDefaults是定時(shí)把緩存中的數(shù)據(jù)寫入磁盤的泉懦,而不是即時(shí)寫入,為了防止在寫完NSUserDefaults后程序退出導(dǎo)致的數(shù)據(jù)丟失疹瘦,可以在寫入數(shù)據(jù)后使用synchronize強(qiáng)制立即將數(shù)據(jù)寫入磁盤崩哩。
查看數(shù)據(jù)存放的位置:
NSLog(@"%@", NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject);
在Finder中前往(快捷鍵 command + shift + G)打印出來(lái)的沙盒地址,可以看到如圖所示的 plist 文件,文件名為工程的 Bundle Identifier 加上后綴 plist言沐,這個(gè)文件名在下文中清空數(shù)據(jù)的時(shí)候會(huì)用到邓嘹。
數(shù)據(jù)在沙盒中的位置
打開plist文件就可以看到數(shù)據(jù)已經(jīng)存到plist文件中了。
plist文件數(shù)據(jù)
2. 取
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
BOOL isLogin = [userDefaults boolForKey:@"isLogin"];
NSString *phoneNumber = [userDefaults objectForKey:@"phoneNumber"];
3. 刪
調(diào)用removeObjectForKey:方法
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults removeObjectForKey:@"isLogin"];
[userDefaults removeObjectForKey:@"phoneNumber"];
直接賦值為nil险胰,也可以刪除
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:nil forKey:@"phoneNumber"];
[userDefaults setObject:nil forKey:@"isLogin"];
4. 改
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@"15212345678" forKey:@"phoneNumber"];
[userDefaults setObject:NO forKey:@"isLogin"];
5. 清空
方法一:上文提到的文件名汹押,這里直接通過(guò)文件名查找到文件清空
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *bundleID = [[NSBundle mainBundle] bundleIdentifier];
[userDefaults removePersistentDomainForName:bundleID];
方法二:遍歷字典清空
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *dict = [userDefaults dictionaryRepresentation];
for(id key in dict) {
[userDefaults removeObjectForKey:key];
}
[userDefaults synchronize];