今天给大家介绍一个OC中的数据持久化,今天介绍其中的三种,plist存储,偏好设置存储及归档存储!下面分别给大家上代码,并在代码中进行详细注释!

一 plist存储(只能存储OC中这些如字典,数组等常见的数据类型,如果想存个自定义类型的数据是不支持的)

//存数据
- (void)saveArray
{// 1.获得沙盒根路径NSString *home = NSHomeDirectory();// 2.document路径NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];// 3.新建数据NSArray *data = @[@"jack", @10, @"ffdsf"];NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];[data writeToFile:filepath atomically:YES];
}//读取数据
- (IBAction)read {// 1.获得沙盒根路径NSString *home = NSHomeDirectory();// 2.document路径NSString *docPath = [home stringByAppendingPathComponent:@"Documents"];// 3.文件路径NSString *filepath = [docPath stringByAppendingPathComponent:@"data.plist"];// 4.读取数据NSArray *data = [NSArray arrayWithContentsOfFile:filepath];NSLog(@"%@", data);
}

二 偏好设置存储(故名思意,偏好设置存储就是存储我们APP的一些偏好设置,例如xcode中的preference)

- (IBAction)save {// 1.利用NSUserDefaults,就能直接访问软件的偏好设置(Library/Preferences)NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];// 2.存储数据[defaults setObject:@"mm" forKey:@"account"];[defaults setObject:@"123" forKey:@"pwd"];[defaults setInteger:10 forKey:@"age"];[defaults setBool:YES forKey:@"auto_login"];// 3.立刻同步
    [defaults synchronize];
}- (IBAction)read {NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];NSString *account = [defaults objectForKey:@"account"];BOOL autoLogin = [defaults boolForKey:@"auto_login"];NSLog(@"%@ -- %d", account, autoLogin);
}

三 归档

ViewController类
#import "ViewController.h"
#import "Student.h"@interface ViewController ()
- (IBAction)save;
- (IBAction)read;
@end@implementation ViewController- (void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.
}- (IBAction)save {// 1.新的模型对象Student *stu = [[Student alloc] init];stu.no = @"42343254";stu.age = 20;stu.height = 1.55;// 2.归档模型对象// 2.1.获得Documents的全路径NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];// 2.2.获得文件的全路径NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];// 2.3.将对象归档
    [NSKeyedArchiver archiveRootObject:stu toFile:path];
}- (IBAction)read {// 1.获得Documents的全路径NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];// 2.获得文件的全路径NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];// 3.从文件中读取MJStudent对象Student *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path];NSLog(@"%@ %d %f", stu.no, stu.age, stu.height);
}
@end

Student类

student.h(这里一定要遵守NSCoding协议,因为归档与反归档要利用NSCoding协议来对要存储的数据来进行编码 ,如果不遵守此协议便会报错!大家切记):

#import <Foundation/Foundation.h>@interface Student : NSObject  <NSCoding>
@property (nonatomic, copy) NSString *no;
@property (nonatomic, assign) double height;
@property (nonatomic, assign) int age;
@end

student.m(这里要实现这两个方法,- (void)encodeWithCoder:(NSCoder *)encoder这个方法是对数据进行存储,并指定对哪几个数据进行存储;- (id)initWithCoder:(NSCoder *)decoder 显而易见这个方法肯定是要告诉我们读取哪些数据了!

#import "Student.h"@interface Student() @end@implementation Student/***  将某个对象写入文件时会调用*  在这个方法中说清楚哪些属性需要存储*/
- (void)encodeWithCoder:(NSCoder *)encoder
{[encoder encodeObject:self.no forKey:@"no"];[encoder encodeInt:self.age forKey:@"age"];[encoder encodeDouble:self.height forKey:@"height"];
}/***  从文件中解析对象时会调用*  在这个方法中说清楚哪些属性需要存储*/
- (id)initWithCoder:(NSCoder *)decoder
{if (self = [super init]) {// 读取文件的内容self.no = [decoder decodeObjectForKey:@"no"];self.age = [decoder decodeIntForKey:@"age"];self.height = [decoder decodeDoubleForKey:@"height"];}return self;
}
@end

到此为止如果有不明白的地方请给我留言,会详细解答.

转载于:https://www.cnblogs.com/ZMiOS/p/5378893.html

关于数据持久化的一个简介相关推荐

  1. iOS中几种数据持久化方案总结

    概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...

  2. 【iOS数据持久化】数据库(SQLite.swift)和FMDB

    数据持久化之SQLite数据库(SQLite.swift使用) 一.     简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了.它的处理速 ...

  3. iOS - 数据持久化之 FMDB 的使用

    前言 上一篇文章「iOS - 使用 SQLite 数据库实现数据持久化」,介绍了如何使用 sqlite3 操作 SQLite 数据库实现增删改查.但是在代码编写的过程中,我们发现 sqlite3 需要 ...

  4. docker $PWD路径_Docker 数据持久化

    1 Docker 数据持久化简介 Docker 持久化存储的原因 Docker 持久化的两种方式(volume和volume container) Docker 持久化存储的运维 2 Docker 持 ...

  5. iOS中几种数据持久化方案-转自简书

    文/helloDolin(简书作者) 原文链接:http://www.jianshu.com/p/934a14e6de49 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者&quo ...

  6. 配置持久化框架diamond简介及高阶应用

    配置持久化框架diamond简介及高阶应用 前言 一.简介 二.特点 三.应用场景 四.server搭建 五.发布配置数据 六.简单应用 七.高阶应用 八.spring动态集成diamond 结束语 ...

  7. 基于 Ceph 的 Kubernetes 数据持久化

    本文通过简单介绍 Ceph 的功能特性与安装配置,并结合应用场景进行实践讲解,演示如何利用 Ceph 实现 Kubernetes 及常用业务需求场景下的数据持久化.在最后部分,介绍 Ceph 的管理维 ...

  8. Java 数据持久化系列之 HikariCP (一)

    在上一篇<Java 数据持久化系列之池化技术>中,我们了解了池化技术,并使用 Apache-common-Pool2 实现了一个简单连接池,实验对比了它和 HikariCP.Druid 等 ...

  9. 一文带你详解Redis常用的数据类型以及面试常碰到的数据持久化机制原理

    前言 关于Redis的知识点总结了一个思维导图分享给大家: 简介 Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,支持五种数据类型格式:** Str ...

最新文章

  1. 使用Hugo搭建自己的个人博客网站
  2. ACM中java的使用
  3. python类中方法调用自己类的方法_python怎么调用类方法
  4. LeetCode 1167. 连接棒材的最低费用(优先队列+贪心)
  5. vba html 教程 pdf,Word VBA教程:CanvasShapes集合
  6. 左室短轴切面_心脏超声常用切面与解剖.pptx
  7. Vetur:Root file specified for compilation
  8. 【linux内核分析与应用-陈莉君】虚拟文件系统的主要数据结构
  9. 在CentOS上MySQL数据库服务器配置方法
  10. 将服务注册到eureka服务端
  11. Python语法小白入门
  12. 英伟达发布528.02 WHQL 新驱动,支持4070 Ti
  13. 过年表情包 || 一个月后就能用啦
  14. MongoDB数据库设计(一)
  15. MarkDown语法详解(Typora编辑器)
  16. Seaborn的调色板(palette)
  17. BIO NIO AIO
  18. 最新Visual Studio的安装与使用 - 工作负荷选择 c语言 | 手把手基础教学
  19. 一加手机怎么root权限_一加手机怎么root? 一加手机卡刷获取root权限教程
  20. 怎样用putty设置SSH tunnel

热门文章

  1. 安装Windows Server 2008 测试机
  2. 用T-SQL修改数据库的恢复模型
  3. 修改GDAL库支持RPC像方改正模型
  4. MFC 教程【10_内存分配方式和调试机制 】
  5. html的table效果,html的table用法(让网页的视觉效果显示出来)
  6. python编写数据库连接工具_详解使用Python写一个向数据库填充数据的小工具(推荐)...
  7. python背单词小程序_python背单词小程序
  8. 计算机软件系统课程导入,中学信息技术 计算机系统的组成课件 硬件软件导入恰当...
  9. school_vue操作记录
  10. hive中统计某列数组的元素个数