iOS中数据保存的方式分析

iOS中承诺关键的数据保存方式有六种:NSUserDefaults:、归档、文件保存、sqlite数据库——iOS数据库、CoreData、KeyChain;

1. NSUserDefaults

1.NSUserDefaults不能保存自定义对象。

2.一般保存用户名,密码,设置项(是否记住密码、是否在2G/3G自动下载图片,是否离线下载等)

3.保存基本数据类型NSString,NSArray,NSDictionary,用法简单,一般保存少量的数据。

用法:

//保存

[[NSUserDefaults standardUserDefaults] setObject: forKey:];

//取值

[[NSUserDefaults standardUserDefaults] objectForKey:];

//立即保存

[[NSUserDefaultsstandardUserDefaults]synchronize];

//移除

[[NSUserDefaults standardUserDefaults] removeObjectForKey:];

二、归档

保存自定义的对象,而且也是保存少量数据。相对于在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦,且只能存储常用类型。

//需要实现NSCoding中的协议的两个方法

- (id)initWithCoder:(NSCoder *)aDecoder{

if (self == [super init]) {

self.name = [aDecoder decodeObjectForKey:Name];

self.sex = [aDecoder decodeObjectForKey:Sex];

self.age = [[aDecoder decodeObjectForKey:Age] integerValue];

}

return self;

}

- (void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject:self.name forKey:Name];

[aCoder encodeObject:self.sex forKey:Sex];

[aCoder encodeObject:[NSNumber numberWithInteger:self.age] forKey:Age];

}

//归档

NSMutableData *data = [[NSMutableData alloc] init];

//创建归档辅助类

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

//编码

[archiver encodeObject:model forKey:@"model"];

//结束编码

[archiver finishEncoding];

//写入到沙盒

NSArray *array =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *fileName = [array.firstObject stringByAppendingPathComponent:@"archiverModel"];

if([data writeToFile:fileName atomically:YES]){

NSLog(@"归档成功");

}

//解档

NSData *undata = [[NSData alloc] initWithContentsOfFile:fileName];

//解档辅助类

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:undata];

//解码并解档出model

TestModel *unModel = [unarchiver decodeObjectForKey:@"model"];

NSLog(@"%@",unModel);

//关闭解档

[unarchiver finishDecoding];

三、文件保存

一般在iOS常用的是plist,一般也是保存少量数据。一般保存数据类NSArray,NSDictioanary.此文件包含了应用程序的配置信息.系统依赖此文件以获取应用程序的相关信息

四、sqlite数据库——iOS数据库


采用SQLite数据库来存储数据。SQLite作为一中小型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。适合保存大量数据,而且sql增删改查操作系统都做了优化。需要写sql语句。

五、CoreData


对sqlite的一个包装,系统会自动把实体转为sql语句。好处使用简单,而且不需要写sql语句。适合保存大量数据。

1)初始化方式

NSConfinementConcurrencyType 默认值,允许在特定的线程中执行,几乎不用

NSPrivateQueueConcurrencyType  只会在主线程中执行

NSMainQueueConcurrencyType 允许在子线程中执行

-(instancetype)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct

2)设置持久化存储协调器(属性)

persistentStoreCoordinator

2.管理模型

1)获取url

方法:[[[NSBundle mainBundle] URLForResource:(NSString *)name withExtension:(NSString *)ext];

2)加载模型

- (nullable instancetype)initWithContentsOfURL:(NSURL *)url;

3)持久化存储协调器

- (instancetype)initWithManagedObjectModel:(NSManagedObjectModel *)model;

六、KeyChain

超过沙盒范围的保存方式,一般保存数据是:app删除了,但是数据不删除。

一般保存隐私数据(用户密码,token, cookie)

iPhone沙盒模型的有四个文件夹,分别是documents,tmp,app,Library。

1、Documents 目录:应用程序数据文件在这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息。

2、AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身。不能进行修改,否则程序不会运行。

3、Library 目录:这个目录下有两个子目录:Caches 和 Preferences

Preferences 目录:包含应用程序的偏好设置文件。不能直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好属性.

Caches 目录:用于存放缓存文件,保存应用程序再次启动过程中需要的信息。SDWebImage第三方库的缓存信息处理都在这个文件中,一般的大容量文件都放在这里。

4、tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。Nsuserdefaults保存的文件一般在tmp文件夹里。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,009评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,808评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,891评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,283评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,285评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,409评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,809评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,487评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,680评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,499评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,548评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,268评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,815评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,872评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,102评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,683评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,253评论 2 341

推荐阅读更多精彩内容