IOS 存储方式(PList、NSUserDefaults、归档
一、PList(XML属性列表)
iOS开发,plist文件读写那些事 - 简书 (jianshu.com)
二、NSUserDefaults
常用存储
NSUserDefaults存储轻量级 的本地数据 ,比如要保存一个登陆界面的数据,用户名、密码之类的。
存储类型
支持的数据类型有NSString、 NSNumber、NSInteger、NSFloat、BOOL、NSArray、NSDictionary、NSDate、等系统定义的数据类型。
存储位置
用NSUserDefaults存储的数据下次程序运行的时候依然存在 .它的数据存储在应用程序内置的一个plist文件里, 在/Library/Prefereces沙盒路径下.
例子:
// 1. 创建NSUserDefaults单例:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// 2. 数据写入:
// 通过 key 值 来存入 和 读取数据
[defaults setInteger:23 forKey:@"myInteger"];
// 注意:对相同的Key赋值约等于一次覆盖,要保证每一个Key的唯一性
// 3. 将数据 立即存入到 磁盘:
[defaults synchronize];
// 4. 通过key值 按照写入对应类型 读取数据 有返回值
NSInteger *myInteger = [defaults integerForKey:@"myInteger"];
移除数据
- removeObjectForKey;
立即写入 synchronize
NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘:
[userDefault synchronize];
将自定义类型数据读写 NSUserDefaults 中
使用NSKeyedArchiver 对数据进行归档 反归档(将自定义类型转换为NSData类型:)
#import <Foundation/Foundation.h>
@interface Student : NSObject <NSCoding>
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *sex;
@property (nonatomic, assign) NSInteger age;
@end
#import "Student.h"
@implementation Student
// 归档
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.age forKey:@"age"];
[aCoder encodeObject:self.sex forKey:@"sex"];
}
// 反归档
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super init];
if (self) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeObjectForKey:@"age"];
self.sex = [aDecoder decodeObjectForKey:@"sex"];
}
return self;
}
@end
写入、读取
#写入
// 首先,要建立一个可变数组来存储 NSDate对象
Student *student = [[Student alloc] init];
// 下面进行的是对student对象的 name, age, sex 赋值
student.name = @"张三";
student.age = @"20";
student.sex = @"男";
// 将student对象转换成为NSData类型
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:student];
// 保存学生信息
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:data forKey:@"oneStudent"];
#读取
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
// 读取data数据
NSData *data = [user objectForKey:@"oneStudent"];
// 将data类型转换成student类型
Student *student = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@", student.name);
NSLog(@"%@", student.age);
NSLog(@"%@", student.sex);
NSuserDefaults 的坑
iOS 最终,我还是决定放弃使用NSUserDefaults了 - 简书 (jianshu.io)
三、归档
归档:,就是将数据写到一个文件里面去。一般我们的应用的变量常量之类的数据都是在内存里面的,只要APP关闭,这些数据都会丢失。但是把数据存储到文件里面去,就能将数据保存到本地磁盘里面(目前iOS基本就是在沙盒里面操作了),不管是APP关闭还是重启设备,下次启动APP的时候都能够读出来。
解档:(别人也叫反归档),就是将数据从文件里面读取出来。在程序里面使用。
【iOS】数据持久化:使用NSKeyedArchiver进行数据归档 - 简书 (jianshu.com)
四:CoreData
iOS 开发Core Data使用方法 – 技术狗 (jishudog.com)
五:文件操作
IOS 开发文件操作——NSFileManager - 星语海蓝 - 博客园 (cnblogs.com)
(15条消息) iOS文件操作_你有故事,我囿酒-CSDN博客