欢迎访问 夜阑小雨 我的学习碎片档案,这里记录了我的学习内容和工作中经验,希望给您带去帮助。

IOS中的几种数据存储方式

ios 夜阑小雨 2036℃ 0评论

1、PList(XML属性列表)

在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦.

//写入文件
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [doc stringByAppendingPathComponent:@”myself.plist”];
NSDictionary *dict = @{@”name”: @”yixiang”};
[dict writeToFile:path atomically:YES];
//读取文件
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];

2、偏好设置(NSUserDefaults)

将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息)

//写入文件
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
[defaults setObject:@”yixiang” forKey:@”name”];
[defaults setInteger:27 forKey:@”age”];
[defaults synchronize];
//读取文件
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
NSString *name=[defaults objectForKey:@”name”];
NSInteger age=[defaults integerForKey:@”age”];

3、归档(NSCoding NSKeyedArchiver NSKeyedUnarchiver)

因为前两者都有一个致命的缺陷,只能存储常用的类型。归档可以实现把自定义的对象存放在文件中。

需要保存的对象必须遵守NSCoding协议,并且实现该协议中- (void)encodeWithCoder:(NSCoder )aCoder和 – (id)initWithCoder:(NSCoder )aDecoder方法。

注:可以直接使用Mjextension 框架直接使用 :https://github.com/CoderMJLee/MJExtension

YXPerson.h文件如下

@interface YXPerson : NSObject<NSCoding>
@property(nonatomic,copy) NSString *name;
@property(nonatomic,assign) int age;
@end

YXPerson.m文件如下:

#import “YYPerson.h”

@implementation YYPerson
-(void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@”name”];
[aCoder encodeInteger:self.age forKey:@”age”];
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if (self=[super init]) {
self.name=[aDecoder decodeObjectForKey:@”name”];
self.age=[aDecoder decodeIntegerForKey:@”age”];
}
return self;
}
@end

在ViewController中对它进行写入和读取

//写入对象
YXPerson *p=[[YXPerson alloc]init];
p.name=@”yixiang”;
p.age=27;

NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *path=[docPath stringByAppendingPathComponent:@”person.yixiang”];

[NSKeyedArchiver archiveRootObject:p toFile:path];

//读取对象
YXPerson *p=[NSKeyedUnarchiver unarchiveObjectWithFile:path];

4、SQLITE数据库

上述三种方法都无法存储大批量的数据,有性能的问题。

 

5、FMDB

FMDB是IOS中一个著名的SQLite数据库操作的开源项目。项目地址为:https://github.com/ccgus/fmdb

。是对SQLIite数据库的C语言接口进行了一层封装,使其满足面向对象的操作,接口比原生的SQLite接口简洁很多。同时也提供一些多线程,缓存,线程池的功能。以后的博客将进行详细介绍,这里不多说了。

6、CoreData

是苹果公司提供的数据持久化的一种方案。

 

转载请注明:夜阑小雨 » IOS中的几种数据存储方式

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址