IOS数据存储方式

时间:2022-04-08 20:33:47
iOS开发常用数据存储方式有:plist、偏好设置 NSUserDefaults、对象归档 NSKeyedArchiver、SQLite3和Core Data   1. plist文件 存储   plist文件通常用于储存用户设置,利用xml属性列表归档NSDictionary、NSArray、NSNumber等类型数据   在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用   注意:plist不能存储自定义对象    2. 偏好设置 NSUserDefaults   偏好设置用来保存“用户名、密码、字体大小、是否自动登录”等设置,主要用于存储应用的设置信息    3. 归档 NSKeydeArchiver   因为前两者都有一个致命的缺陷,只能存储常用的类型。归档可以实现把自定义的对象存放在文件中。   要使用对象归档,对象必须实现NSCoding协议。大部分Object C对象都符合NSCoding协议,也可以在自定义对象中实现NSCoding协议,要实现NSCoding协议    4. SQLite3   SQLite是一款轻型的嵌入式数据库,安卓和ios开发使用的都是SQLite数据库  在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等。  离线缓存一般都是把数据保存到项目的沙盒中,但上述三种方法都有一个致命的缺点,那就是都无法存储大批量的数据,有性能的问题。  如果使用归档,两个问题:    (1)数据的存取都必须是完整的,要求写入的时候要一次性写入,读取的时候要一次性全部读取,这涉及到应用的性能问题。    (2)如果有1000条数据,此时要把第1001条数据存入,那么需要把所有的数据取出来,把这条数据加上去之后,再存入。  说明:以上的三种技术不能处理大批量数据的存储,大批量数据通常使用数据库来进行存储。  5. Core Data   Core Data是对SQLite的封装,因为iOS中使用的SQLite是纯C语言的。    
  1. plist 文件的存储/读取方法   IOS数据存储方式
// 文件路径
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"data.plist"];
// 设置数据
NSArray *data = @[@"jack", @10, @"abcd"];
// 储存plist
[data writeToFile:path atomically:YES];
// 读取
NSArray *data2 = [NSArray arrayWithContentsOfFile: path];
IOS数据存储方式

2. 偏好设置 NSUserDefaults

IOS数据存储方式
/*  偏好设置——数据存储   类中有相应属性  */
- (void)save {
// 1.利用NSUserDefaults,就能直接访问软件的偏好设置(Library/Preferences)
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

// 2.存储数据
[defaults setObject:@"qr" forKey:@"name"];
[defaults setObject:
@"123" forKey:@"pwd"];
[defaults setInteger:
10 forKey:@"age"];
[defaults setBool:YES forKey:
@"auto_login"];

// 3.立刻同步
[defaults synchronize];

}
IOS数据存储方式
IOS数据存储方式
/*  偏好设置——读取数据  */
- (void)read {
NSUserDefaults
*defaults = [NSUserDefaults standardUserDefaults];
NSString
*account = [defaults objectForKey:@"account"];
BOOL autoLogin
= [defaults boolForKey:@"auto_login"];
NSLog(
@"%@ -- %d", account, autoLogin);

}
IOS数据存储方式

 

3. 对象归档 NSKeyedArchiver

IOS数据存储方式
/*  归档——存储自定义对象  */
Person
*p = [[Person alloc] init];
p.age
= 18;
p.name
= @"qr";
// 拼接文件名
NSString *path = NSTemporaryDirectory() stringByAppendingPathComponent:@"person.data"];
[NSKeyedArchiver archiveRootObject:p toFile:Path];
// 解档
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
IOS数据存储方式
IOS数据存储方式
/*  Person 类中要实现的方法  */

// 遵守< NSCoding > 协议

// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档
// 作用:告诉苹果当前对象中哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:
@"name"];
[aCoder encodeInt:_age forKey:
@"age"];
}
————————————————————————————
// 作用:告诉苹果当前对象中哪些属性需要解档
// initWithCoder什么时候调用:只要解析一个文件的时候就会调用
- (id)initWithCoder:(NSCoder *)aDecoder
{
#warning [super initWithCoder]
// 这里不能用[super initWithCoder],什么时候调用[super initWithCoder:aDecoder]:只要父类遵守了NSCoding协议,就调用
if (self = [super init]) {
// 解档
// 注意一定要记得给成员属性赋值
_name = [aDecoder decodeObjectForKey:@"name"];
_age
= [aDecoder decodeIntForKey:@"age"];
}
return self;
}
IOS数据存储方式