iOS用两行代码完美解决数据持久化

所属分类: 软件编程 / IOS 阅读数: 1584
收藏 0 赞 0 分享

前言

在实际的iOS开发中,有些时候涉及到将程序的状态保存下来,以便下一次恢复,或者是记录用户的一些喜好和用户的登录信息等等。 这就需要涉及到数据的持久化了,所谓数据持久化就是数据的本地保存,将数据从内存中迁入到存储器上。网上有很多种数据持久化的方法,如实现自己实现I/O、数据库、云或则走第三方接口等等。但是有时候可能只是进行一些简单的数据存储,如用户的偏好设置、用户的sessionID等等,这时候使用上述方法便显得有点兴师动众了,现在需要一种更加轻量化的操作方式。

一、认识 NSUserDefaults

为了寻求上述问题的解决方案,查阅apple官方文档发现,有一个类NSUserDefaults是苹果设计专门用来解决这个问题的:

 NSUserDefaults is a hierarchical persistent interprocess
 (optionally distributed) key-value store, optimized for storing user settings.

翻译大致如下:

NSUserDefaults 是一种进程间(任意分布)的分层级持久化键-值存储,为存储用户设置而优化。

详细说明可以查阅官方文档,这里只介绍其使用。

现在,我们已经找到了一种轻量级的数据持久化解决方案了,为什么说它轻量级呢。因为apple官方设计它的目的就是为了解决用户设置的存储问题,下面就来介绍它的使用。

二、使用 NSUserDefaults

由于NSUserDefaults是一种进程间的解决方案,所以我们可以在任意一个进程中调用它来访问和存储用户的信息。
举个例子:我们要对用户的用户名进行数据的持久化操作

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@"whf" forKey:@"name"];

通过上面这两行代码,我们就已经将用户的姓名通过键值对的方式存储到本地了。不需要指定数据的存储位置,一切由系统搞定,我们只需要告诉系统我们要存什么。如果多次存储的是同一个键的值,那么这个键的值是根据最后一次的值定的,也就是说系统是覆盖写,而不是追加写最后返回的是数组。

接下来演示取数据的过程:在任意线程中,我们调用

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *userName = [userDefaults objectForKey:@"name"];

这两句就可以从存储器上获得我们要的数据了,如果数据不存在,那么返回的对象就是nil。

三、底层实现机制

通过NSUserDefaults的使用,发现程序重新运行数据依旧存在,那么这个数据肯定是被存储在了手机的存储器上。现在来探寻它的实现机制:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 [userDefaults setObject:@"123" forKey:@"name"];
 NSString *userName = [userDefaults objectForKey:@"name"];

 NSLog(@"%@",userName);
 NSString *homeDirectory = NSHomeDirectory();
 NSLog(@"homeDire --------%@",homeDirectory);

运行结果:

根据路径进入沙盒发现,在沙盒的Library/Preferences/目录下发现多出了一个com.itripbuyer.Date-Persistence.plist的plist文件。

打开后发现里面有一个键值对,并且就是我们刚刚操作的数据。于是我猜测,通过我们刚才的两行代码,系统将我们的数据转换成了一个plist文件,这个文件中装载的是一些键值对。

四、灵活巧用

NSUserDefaults 官方给出的用途是存储用户的Setting,但是通过上述操作发现,程序中凡是涉及到键值对的存储,都可以使用NSUserDefaults来实现,即使不是键值对的形式,转换成键值对也要用NSUserDefaults来实现,这样既省时又省力,还能用最简洁的代码换来最稳定的数据持久化操作。

以上就是iOS用两行代码完美解决数据持久化的全部内容,希望本文对大家开发IOS的时候有所帮助。

更多精彩内容其他人还在看

iOS开发笔记--详解UILabel的相关属性设置

这篇文章主要介绍了iOS开发笔记--详解UILabel的相关属性设置,对初学者具有一定的参考价值,有需要的可以了解一下。
收藏 0 赞 0 分享

iOS中获取系统相册中的图片实例

这篇文章主要介绍了iOS中获取系统相册中的图片实例,具有一定的参考价值没有需要的朋友可以了解一下。
收藏 0 赞 0 分享

iOS 检测网络状态的两种方法

一般有Reachability和AFNetworking监测两种方式,都是第三方的框架,下文逐一详细给大家讲解,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

IOS 性能优化中离屏渲染

本文主要介绍了IOS 性能优化中离屏渲染的资料,提供了几种方法讲解了优化,有需要的小伙伴可以参考下
收藏 0 赞 0 分享

iOS获取当前设备型号等信息(全)包含iPhone7和iPhone7P

这篇文章主要介绍了iOS获取当前设备型号设备信息的总结包含iPhone7和iPhone7P,包括ios7之前之后的获取方式,本文接的非常详细,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS实现爆炸的粒子效果示例代码

之前在网上看到了一个Android实现的爆炸效果,感觉非常不错,所以自己尝试用iOS来实现下效果,现在将实现的过程、原理以及遇到的问题分享给大家,有需要的朋友们可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

iOS毕业设计之天气预报App

这篇文章主要为大家详细介绍了iOS毕业设计之天气预报App,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS轻点、触摸和手势代码开发

这篇文章主要为大家详细介绍了iOS轻点、触摸和手势代码开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS 实现多代理的方法及实例代码

这篇文章主要介绍了iOS 实现多代理的方法及实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS文字渐变色效果的实现方法

在大家日常开发iOS的过程中,可能会遇到要实现文字渐变色的效果,这篇文章文章通过示例代码和详细的步骤介绍了如何利用iOS实现文字渐变色的效果,实现后的很不错,感兴趣的朋友们下面来一起看看吧。
收藏 0 赞 0 分享
查看更多