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。

代码如下:

//
//  ViewController.m
//  NSUserDefaultsDemo
//
//  Created by 555chy on 6/25/16.
//  Copyright © 2016 555chy. All rights reserved.
//#import "ViewController.h"@interface ViewController ()
@end
@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.//NSUserdefaults支持的数据格式有:BOOL、NSNumber(integer、float、double)、NSString、NSDate、NSArray、NSDictionary等NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];//写入数据bool sBOOL = YES;NSInteger sInteger = 1;float sFloat = 2.3;double sDouble = 4.5;NSString *sString = @"string";//const char *str = "abcdefg";//NSData *sData = [NSData dataWithBytes:str length:strlen(str)];NSData *sData = [sString dataUsingEncoding:NSUTF8StringEncoding];NSDate *sDate = [NSDate date];NSArray *sArray = [NSArray arrayWithObjects:@"array1", @"array2", @"array3", nil];NSDictionary *sDictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"chy", @"24", @"YES", nil] forKeys:[NSArray arrayWithObjects:@"name", @"age", @"isMale", nil]];[userDefaults setBool:sBOOL forKey:@"bool"];[userDefaults setInteger:sInteger forKey:@"integer"];[userDefaults setFloat:sFloat forKey:@"float"];[userDefaults setDouble:sDouble forKey:@"double"];[userDefaults setObject:sString forKey:@"string"];[userDefaults setObject:sData forKey:@"data"];[userDefaults setObject:sDate forKey:@"date"];[userDefaults setObject:sArray forKey:@"array"];[userDefaults setObject:sDictionary forKey:@"dictionary"];//这里建议同步存储到磁盘中,但不是必须的,因为数据会自动缓存到内存中[userDefaults synchronize];//读取数据BOOL gBOOL;NSInteger gInteger;float gFloat;double gDouble;NSString *gString;NSData *gData;NSDate *gDate;NSArray *gArray;NSDictionary *gDictionary;gBOOL = [userDefaults boolForKey:@"bool"];gInteger = [userDefaults integerForKey:@"integer"];gFloat = [userDefaults floatForKey:@"float"];gDouble = [userDefaults doubleForKey:@"double"];gString = [userDefaults stringForKey:@"string"];gData = [userDefaults objectForKey:@"data"];gDate = [userDefaults objectForKey:@"date"];gArray = [userDefaults objectForKey:@"array"];gDictionary = [userDefaults objectForKey:@"dictionary"];NSLog(@"gBool = %d", gBOOL);NSLog(@"gInteger = %ld", gInteger);NSLog(@"gFloat = %f", gFloat);NSLog(@"gDouble = %lf", gDouble);NSLog(@"gString = %@", gString);NSLog(@"gData = %@", [[NSString alloc] initWithData:gData encoding:NSUTF8StringEncoding]);NSLog(@"gDate = %@", gDate);NSLog(@"gArray = %@", gArray);NSLog(@"gDictionary = %@", gDictionary);
}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}@end

测试截图:

iOS 偏好设置 NSUserDefault相关推荐

  1. iOS偏好设置的存储注意事项

    // //  ViewController.m //  偏好设置 // //  Created by GuoYule on 15/3/10. //  Copyright (c) 2015年 GuoYu ...

  2. iOS开发之iOS程序偏好设置(Settings Bundle)的使用

    2019独角兽企业重金招聘Python工程师标准>>> 在Android手机上, 在某个程序里,通过按Menu键,一般都会打开这个程序的设置,而在iOS里,系统提供了一个很好的保存程 ...

  3. iOS之应用偏好设置

    为什么80%的码农都做不了架构师?>>>    如今,即便是最简单的计算机程序也会包含一个偏好设置窗口,用户可以在其中设置应用专属的选项.在MAC OS X中,Preferences ...

  4. iOS开发之数据存储之Preference(偏好设置)

    1.概述 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能. 每个应用都有个NSUserDefaults实例,通过它来存取偏好 ...

  5. ios应用数据存储方式(偏好设置)

    iOS开发UI篇-ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...

  6. ios应用数据存储方式(偏好设置)-转

    一.简单介绍  1.很多ios应用都支持偏好设置,比如保存用户名,密码,字体大小等设置,ios提供了一套标准的解决方案来为应用加入偏好设置功能.  2.每个应用都有个NSUserDefaults实例, ...

  7. iOS开发UI篇—ios应用数据存储方式(偏好设置)

    一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用都有个NSUserDefaults实例,通过它来存取偏 ...

  8. iOS学习笔记15 序列化、偏好设置和归档

    ###一.本地持久化 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist ...

  9. iOS火焰动画效果、图文混排框架、StackView效果、偏好设置、底部手势等源码

    iOS精选源码 高性能图文混排框架,构架顺滑的iOS应用. 使用OpenGLE覆盖阿尔法通道视频动画播放器视图. 可选最大日期截至当日日期的日期轮选器ChooseDatePicker 简单轻量的图片浏 ...

最新文章

  1. 【Java常识】6.0面向对象认知和Eclipse的实用使用、==号和equals方法的区别
  2. 冒泡排序 小白学demo_day2
  3. 【渝粤教育】电大中专学前儿童科学教育1作业 题库
  4. java 使用三元运算符和if-else获取两个和三个数中的最大值
  5. Eclipce Luna 离线安装ADT23
  6. 【M25】将构造方法和非成员方法虚化
  7. ubuntu 16卸载mysql_ubuntu16.04 彻底卸载MySQL
  8. vue 给checkbox 赋值_浅谈vue中关于checkbox数据绑定v-model指令的个人理解
  9. 【Janino】Janino框架初识与使用教程
  10. C++静态数据成员与静态函数(案例分析)
  11. 深入学习 Redis(1):Redis 内存模型
  12. thoughtworks作业trains
  13. blowfish java_blowfish加密算法
  14. OpenCV实现照片自动红眼去除
  15. Scrum在大型游戏团队中的应用
  16. 审计溯源 | IP-guard终端操作审计,助力高效防控泄密风险
  17. 数智赋能,新华三打造郑州“智美新城”
  18. 自动解决智能拼图,A*算法
  19. 北航考研计算机学院,北航计算机学院考研经验
  20. JavaWeb frontTools / fronttool / web design

热门文章

  1. 计算机英语实用教程课后答案,计算机英语实用教程课后题参考答案.pdf
  2. PTA L1-059 敲笨钟
  3. mysql 原子操作
  4. 中国移动刘光毅:从5G的发展经验看6G
  5. 面向对象的基础知识总结
  6. ios 扇形 按钮_IOS 开发中画扇形图实例详解
  7. 摄影构图学83年绝版_点评2张粉丝投稿,有1处共同错误,3个摄影技巧“变废为宝”...
  8. TI DSP 28335 ePWM实现单路带死区PWM
  9. 备份表(表结构和数据)
  10. 看完这篇 教你玩转渗透测试靶机vulnhub——DC1