NSUserDefaults
来源:互联网 发布:网络歌曲人生路视频 编辑:程序博客网 时间:2024/05/17 07:37
(1).NSUserDefaults 是适合以下轻量级的本地数据存储,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的是一些信息,这时候就不能直接存储到NSUserDefaults了
(2).NSUserDefaults是一个单例,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用
(3). NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL
#pragma mark - 存取不可变对象 //如果想要将上述数据类型的数据永久保存到NSUserDefaults中去,只需要简单的操作(一个Value 一个Key ),例如,想要保存一个NSString的对象,代码实现为 //将NSString 对象存储到 NSUserDefaults 中 NSString *passWord = @"1234567"; NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; [user setObject:passWord forKey:@"userPassWord"]; [user setInteger:10 forKey:@"count"]; [user synchronize]; //同步存储到磁盘中,不是必须存储 //将数据取出 NSUserDefaults *users = [NSUserDefaults standardUserDefaults]; NSString *passWord1 = [users objectForKey:@"userPassWord"]; NSLog(@"passWord1 == %@",passWord1); //注意: 对相同的Key赋值约等于一次覆盖,要保证每一个Key的唯一性#pragma mark - 照片
UIImage *image = [UIImage imageNamed:@"1.png"]; NSData *imageData = UIImageJPEGRepresentation(image,100); //把image归档为nsdata [users setObject:imageData forKey:@"image"]; /* - setBool:forKey: - setFloat:forKey: - setInteger:forKey: - setDouble:forKey: - setURL:forKey: */存取可变对象
#pragma mark -存取可变对象 //NSUserDefaults 存储的对象全是不可变的 ,如果我想要存储一个 NSMutableArray 对象,我必须先创建一个不可变数组(NSArray)再将它存入NSUserDefaults中去,代码如下: NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"123",@"234", nil]; NSArray *array = [NSArray arrayWithArray:mutableArray]; NSUserDefaults *user1 = [NSUserDefaults standardUserDefaults]; [user1 setObject:array forKey:@"记住存放的一定是不可变的"]; //取出数据:想要用NSUserDefaults中的数据给可变数组赋值 NSUserDefaults *user2 = [NSUserDefaults standardUserDefaults]; NSMutableArray *arr = [NSMutableArray arrayWithArray:[user2 objectForKey:@"记住存放的一定是不可变的"]]; NSLog(@"arr = %@",arr);使用 NSUserDefaults 存储自定义对象
(1).自定义对象Student,继承NSObject,在.h文件中:
//我们要做的就是将Student类型变成NSData类型 ,那么就必须实现归档@interface Student : NSObject<NSCoding>@property(nonatomic,strong)NSString *name;@property(nonatomic,strong)NSString *studentNumer;@property(nonatomic,strong)NSString *sex;
(2).在.m中实现
-(void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:self.studentNumer forKey:@"number"]; [aCoder encodeObject:self.sex forKey:@"sex"];}-(instancetype)initWithCoder:(NSCoder *)aDecoder{ self = [super init]; if (self) { self.name = [aDecoder decodeObjectForKey:@"name"]; self.studentNumer = [aDecoder decodeObjectForKey:@"number"]; self.sex = [aDecoder decodeObjectForKey:@"sex"]; } return self;}
(3).在viewController中
// 当数据重复而且多的时候(例如想存储全班同学的学号,姓名,性别(这个数据量可能太大了 )),如果不用SQLite 存储 (多数据最好还是用这个),你可以选择使用归档,再将文件写入本地,但是这种方式和 NSUserDefaults 比起来麻烦多了(因为NSFileManage 本来就挺复杂) ,但是问题是,NSUserDefaults 本身不支持自定义对象的存储,不过它支持NSData的类型,下面举一个例子来介绍。 Student *student = [[Student alloc]init]; student.name = @"wangyy"; student.studentNumer = @"101113130"; student.sex = @"女"; //新建一个数组存放全部学生 NSMutableArray *arrayStu = [NSMutableArray arrayWithCapacity:50]; //将student类转变为NSData NSData *dataa = [NSKeyedArchiver archivedDataWithRootObject:student]; //将data存放在数组中 [arrayStu addObject:dataa]; //如果只想存一个人的信息 NSData *data1 = [NSKeyedArchiver archivedDataWithRootObject:student]; NSUserDefaults *user3 = [NSUserDefaults standardUserDefaults]; [user3 setObject:data1 forKey:@"oneStudent"]; //如果你想存储全班同学的信息,你还要用一个for循环将data 放入 dataArray中 //记住要转换成不可变数组类型 NSArray * arrayAllStu = [NSArray arrayWithArray:arrayStu]; NSUserDefaults *user4 = [NSUserDefaults standardUserDefaults]; [user4 setObject:arrayAllStu forKey:@"allStudent"]; //从NSUserDefaults中取出数据在还原也很简单 NSUserDefaults *user5 = [NSUserDefaults standardUserDefaults]; NSData *data5 = [user5 objectForKey:@"oneStudent"]; Student *student1 = [NSKeyedUnarchiver unarchiveObjectWithData:data5];
删除default值- (void)removeObjectForKey:(NSString *)defaultName
访问管理环境下的keys
<ul class="ul1"><li class="li5">objectIsForcedForKey:</li><li class="li5">objectIsForcedForKey:inDomain:</li></ul>
维护稳定域
– removeVolatileDomainForName: – setVolatileDomain:forName: – volatileDomainForName: – volatileDomainNames
维护套件
– addSuiteNamed: – removeSuiteNamed:保护持久域
– synchronize //存至磁盘 – removePersistentDomainForName: – setPersistentDomain:forName: – persistentDomainNamesDeprecated
0 0
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- NSUserDefaults
- Swift基础(十九)UISlider
- 工厂类实现单例
- 在win系统使用VM安装mac虚拟机 (0S X10.11&&OS X10.12)
- PAT(B) - 1048. 数字加密(20)
- SDUT2131数据结构实验之栈一:进制转换
- NSUserDefaults
- 【9914】最小乘车费用
- python数据库操作(1)--Mysql/Sqlite--DB-API
- SDUT2134数据结构实验之栈四:括号匹配
- 代码容错性及设计的一些小技巧(持续更新)
- vim编辑器的使用
- opencv免费、高性能的人脸检测函数
- 在Edittext中设置输入的类型
- 数据压缩算法-游程编码RLE