服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS用两行代码完美解决数据持久化

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

2021-01-23 16:55王韩峰 IOS

所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一种巧妙的方法,用两行代码解决这个问题,一起来学习下。

前言

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

一、认识 NSUserDefaults

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

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

翻译大致如下:

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

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

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

二、使用 NSUserDefaults

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

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

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

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

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

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

三、底层实现机制

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

?
1
2
3
4
5
6
7
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 [userDefaults setObject:@"123" forKey:@"name"];
 NSString *userName = [userDefaults objectForKey:@"name"];
 
 NSLog(@"%@",userName);
 NSString *homeDirectory = NSHomeDirectory();
 NSLog(@"homeDire --------%@",homeDirectory);

运行结果:

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

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

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

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

四、灵活巧用

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

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

原文链接:http://www.jianshu.com/p/1085815457bd

延伸 · 阅读

精彩推荐
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17