iOS 偏好设置 NSUserDefault

举报
福州司马懿 发表于 2021/11/19 07:02:50 2021/11/19
【摘要】         NSUserDefaults类提供了一个与系统进行交互的编程接口,用来存储、恢复应用程序的偏好设置和配置数据等,适合存储轻量级的本地数据。比如保存一个登陆界面的数据,例如用户名、密码之类的。         如果使用plist文件...

        NSUserDefaults类提供了一个与系统进行交互的编程接口,用来存储、恢复应用程序的偏好设置和配置数据等,适合存储轻量级的本地数据。比如保存一个登陆界面的数据,例如用户名、密码之类的。

        如果使用plist文件存储,那么就要自己创建文件,读取文件,很麻烦。同时NSUserDefaults的缓存还避免了再每次读取数据的时候都打开数据库的操作.而用NSUserDefaults则不用管这些东西,直接存储或读取就好了。

        NSUserDefaults是单例的,同时也是线程安全的。

        NSUserDefaults支持的数据类型有:BOOL、NSNumber(Integer、Float、Double)、NSString、NSData、NSDate、NSArray、NSDictionary、NSObject<NSCoding>

注意:

    (1)自定义类可以通过NSData的方式进行存储,不过要实现NSCoding这个protocol才行,NSObject<NSCoding>

    (2)系统会保存到该应用下的/Library/Preferences/gongcheng.plist文件中。需要注意的是如果程序意外退出,NSUserDefaultsstandardUserDefaults数据不会被系统写入到该文件,所以,要使用[[NSUserDefaultsstandardUserDefaults] synchronize]命令直接同步到文件里,来避免数据的丢失。

    (3)从NSUserDefaults返回的值并不是不可改变的,即使是存储的时候使用可变值,当你使用 stringForKey: 方法获取的值,这个值仍然是不可改变的,如果要改变需使用duplicated。

代码如下:


  
  1. //
  2. // ViewController.m
  3. // NSUserDefaultsDemo
  4. //
  5. // Created by 555chy on 6/25/16.
  6. // Copyright © 2016 555chy. All rights reserved.
  7. //
  8. #import "ViewController.h"
  9. @interface ViewController ()
  10. @end
  11. @implementation ViewController
  12. - (void)viewDidLoad {
  13. [super viewDidLoad];
  14. // Do any additional setup after loading the view, typically from a nib.
  15. //NSUserdefaults支持的数据格式有:BOOL、NSNumber(integer、float、double)、NSString、NSDate、NSArray、NSDictionary等
  16. NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
  17. //写入数据
  18. bool sBOOL = YES;
  19. NSInteger sInteger = 1;
  20. float sFloat = 2.3;
  21. double sDouble = 4.5;
  22. NSString *sString = @"string";
  23. //const char *str = "abcdefg";
  24. //NSData *sData = [NSData dataWithBytes:str length:strlen(str)];
  25. NSData *sData = [sString dataUsingEncoding:NSUTF8StringEncoding];
  26. NSDate *sDate = [NSDate date];
  27. NSArray *sArray = [NSArray arrayWithObjects:@"array1", @"array2", @"array3", nil];
  28. NSDictionary *sDictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"chy", @"24", @"YES", nil] forKeys:[NSArray arrayWithObjects:@"name", @"age", @"isMale", nil]];
  29. [userDefaults setBool:sBOOL forKey:@"bool"];
  30. [userDefaults setInteger:sInteger forKey:@"integer"];
  31. [userDefaults setFloat:sFloat forKey:@"float"];
  32. [userDefaults setDouble:sDouble forKey:@"double"];
  33. [userDefaults setObject:sString forKey:@"string"];
  34. [userDefaults setObject:sData forKey:@"data"];
  35. [userDefaults setObject:sDate forKey:@"date"];
  36. [userDefaults setObject:sArray forKey:@"array"];
  37. [userDefaults setObject:sDictionary forKey:@"dictionary"];
  38. //这里建议同步存储到磁盘中,但不是必须的,因为数据会自动缓存到内存中
  39. [userDefaults synchronize];
  40. //读取数据
  41. BOOL gBOOL;
  42. NSInteger gInteger;
  43. float gFloat;
  44. double gDouble;
  45. NSString *gString;
  46. NSData *gData;
  47. NSDate *gDate;
  48. NSArray *gArray;
  49. NSDictionary *gDictionary;
  50. gBOOL = [userDefaults boolForKey:@"bool"];
  51. gInteger = [userDefaults integerForKey:@"integer"];
  52. gFloat = [userDefaults floatForKey:@"float"];
  53. gDouble = [userDefaults doubleForKey:@"double"];
  54. gString = [userDefaults stringForKey:@"string"];
  55. gData = [userDefaults objectForKey:@"data"];
  56. gDate = [userDefaults objectForKey:@"date"];
  57. gArray = [userDefaults objectForKey:@"array"];
  58. gDictionary = [userDefaults objectForKey:@"dictionary"];
  59. NSLog(@"gBool = %d", gBOOL);
  60. NSLog(@"gInteger = %ld", gInteger);
  61. NSLog(@"gFloat = %f", gFloat);
  62. NSLog(@"gDouble = %lf", gDouble);
  63. NSLog(@"gString = %@", gString);
  64. NSLog(@"gData = %@", [[NSString alloc] initWithData:gData encoding:NSUTF8StringEncoding]);
  65. NSLog(@"gDate = %@", gDate);
  66. NSLog(@"gArray = %@", gArray);
  67. NSLog(@"gDictionary = %@", gDictionary);
  68. }
  69. - (void)didReceiveMemoryWarning {
  70. [super didReceiveMemoryWarning];
  71. // Dispose of any resources that can be recreated.
  72. }
  73. @end



文章来源: blog.csdn.net,作者:福州-司马懿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/chy555chy/article/details/51759961

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。