初级数据持久化NSKeyedArchiver(二)

看代码:

 1 #import "MainViewController.h"
 2 #import "Student.h"
 3
 4 @interface MainViewController ()
 5
 6 @end
 7
 8 @implementation MainViewController
 9
10 - (void)viewDidLoad {
11     [super viewDidLoad];
12     // Do any additional setup after loading the view.
13
14
15     Student *student = [[Student alloc]initWithName:@"安妮" Sex:@"女" HP:1800];
16
17
18
19
20
21 #pragma mark --归档(序列化)
22
23     //归档
24     //1.创建NSMUTableData
25     NSMutableData *data = [NSMutableData data];
26
27     //2.创建一个归档对象
28     NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
29
30     //3.用归档对象将自定义类的对象转化成二进制数据流(NSData)
31     [archiver encodeObject:student forKey:@"student"];
32
33     //4.归档完成
34     [archiver finishEncoding];
35
36     //5.归档完成之后写入本地
37
38     NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
39
40 //    //直接写入路劲
41 //    [NSKeyedArchiver archiveRootObject:student toFile:[documentsPath stringByAppendingPathComponent:@"student.mp3"]];
42
43     NSString *studentPath = [documentsPath stringByAppendingPathComponent:@"student.txt"];
44
45     [data writeToFile:studentPath atomically:YES];
46
47     NSLog(@"%@",studentPath);
48
49
50
51
52
53
54 #pragma mark --反归档(反序列化)
55
56     //1.获取存进去的二进制文件
57     NSMutableData *unData = [[NSMutableData alloc]initWithContentsOfFile:studentPath];
58
59     //2.创建反归档对象
60     NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:unData];
61
62     //3.将二进制文件转化为OC对象
63
64     Student *stu = [unArchiver decodeObjectForKey:@"student"];
65
66     NSLog(@"%@",stu.name);
67
68     [unArchiver finishDecoding];
69
70
71 }

model类里面怎么写了?继续看下去

 1 #import <Foundation/Foundation.h>
 2
 3 //必须签订协议
 4 @interface Student : NSObject<NSCoding>
 5
 6 @property (nonatomic,retain) NSString *name ;
 7
 8 @property (nonatomic,retain) NSString *sex ;
 9
10 @property (nonatomic,assign) int HP ;
11
12 -(instancetype)initWithName:(NSString *)name Sex:(NSString *)sex HP:(int)HP ;
13
14
15 **********************************************
16
17 #import "Student.h"
18
19 @implementation Student
20
21 -(void)dealloc{
22     [_name release];
23     [_sex release];
24     [super dealloc];
25 }
26
27
28 #pragma mark --解压过程
29 -(id)initWithCoder:(NSCoder *)aDecoder{
30     self = [super init] ;
31     if (self) {
32         self.name = [aDecoder decodeObjectForKey:@"name"];
33         self.sex = [aDecoder decodeObjectForKey:@"sex"] ;
34         self.HP = [aDecoder decodeIntForKey:@"HP"] ;
35     }
36
37
38     return self ;
39 }
40
41 #pragma  mark --压缩过程
42 -(void)encodeWithCoder:(NSCoder *)aCoder{
43
44     //转化的是自身的属性,压缩过程
45     [aCoder encodeObject:self.name forKey:@"name"] ;
46     [aCoder encodeObject:self.sex forKey:@"sex"] ;
47     [aCoder encodeInt:self.HP forKey:@"HP"] ;
48
49
50 }
51
52
53
54
55 -(instancetype)initWithName:(NSString *)name Sex:(NSString *)sex HP:(int)HP{
56
57     if (self = [super init]) {
58         self.name = name ;
59         self.sex = sex ;
60         self.HP = HP ;
61     }
62
63     return self ;
64
65
66 }
时间: 2024-10-14 11:13:30

初级数据持久化NSKeyedArchiver(二)的相关文章

iOS数据持久化之二——归档与设计可存储化的数据模型基类

iOS数据持久化之二--归档与设计可存储化的数据模型基类 一.引言 在上一篇博客中,我们介绍了用plist文件进行数据持久化的方法.虽然简单易用,但随着开发的深入,你会发现,这种方式还是有很大的局限性.试想,如果我们可以将用户的登录返回信息模型,游戏中角色的属性信息模型进行直接的持久化存取,那是不是非常爽的事,幸运的是,我们可以通过归档,来设计一个这样的数据模型. 二.先来精通归档吧 归档也是iOS提供给开发者的一种数据存储的方式,事实上,几乎所有的数据类型都可以通过归档来进行存取.其存储与读取

初级数据持久化

1.沙盒机制 通过代码查找程序沙盒相对路径,返回类型是NSArray: NSArray * arr = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSLog(@"%@",arr); 2.简单写入文件. 1.NSString 写入文件 1.1获取document文件夹路径. //1.NSString 写入文件 //1.1获取document文件夹路径 // NSStrin

IOS 初级数据持久化-沙盒机制

什么是数据持久化?数据的永久存储 为什么要坐数据持久化:存储在内存中的数据,程序关闭,内存释放,数据丢失,这种数据是临时的 数据初九化的本质:数据保存成文件,存储到程序的沙河中 1.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在IOS系统内都放在了统一的文件夹目录下 沙盒的本质就是一个文件夹,名字是随机分配的. 2.沙盒路径的位置 1.通过Finder查找程序沙盒相对的路径 通过代码查找程序沙盒相对路径 NSString *D

学习在.NET Core中使用RabbitMQ进行消息传递之持久化(二)

前言 上一节我们简单介绍了RabbitMQ和在安装后启动所出现的问题,本节我们开始正式进入RabbitMQ的学习,对于基本概念请从官网或者其他前辈博客上查阅,我这里不介绍基础性东西,只会简单提一下,请知悉. RabbitMQ持久化 在RabbitMQ中存在四种交换机,一是直连交换机(Direct Exchange),二是广播交换机(Fantout Exchange),三是主体交换机(Topic Exchange),四是头交换机(Header Exchange),每种交换机都有其对应场景,后面会一

IOS开发-数据持久化(二)【sqlite数据库】

概要 本章主要简示了IOS开发中使用sqlite来持久化数据,其使用方法和C++中使用sqlite基本一致. 结果展示 (其实没啥看的) 流程概要 1.因为使用的是以前的工程,所以主需要再拖拉两个按钮就差不多了 2.因为要使用sqlite,所以需要引用sqlite库(sqlite框架),在工程设置里面的,如下图所示 3.在原先的序列化类里面添加保存和加载数据到数据库的函数,即可,具体见代码. 主要代码 数据库操作代码 -(id)initWithFilePath:(NSString*)file {

UI第十八讲.初级数据持久化

一.什么是沙盒机制 获取沙盒路径的方法: 1 //第一种 获取沙盒路径的方法 2 NSString *pathStr = NSUserName(); 3 NSString *homePathStr = NSHomeDirectoryForUser(pathStr); 4 NSLog(@"%@",homePathStr); 5 //第二种 获取沙盒路径的方法 6 NSString *homePathStr1 = NSHomeDirectory(); 7 NSLog(@"%@&q

SQL Server-聚焦计算列持久化(二十一)

前言 上一节我们结束了Hash Match Aggregate和Stream Aggregate的讲解,本系列我们来讲讲关于SQL Server中的计算列问题,简短的内容,深入的理解,Always to review the basics. 初探计算列持久化(Compued Column Persisted) 在SQL Server 2005就引入了计算列,我们首先稍微看下在msdn关于计算列的定义:计算列由可以使用同一表中的其他列的表达式计算得来.表达式可以是非计算列的列名.常量.函数,也可以

python + docker, 实现天气数据 从FTP获取以及持久化(二)-- python操作MySQL数据库

前言 在这一节中,我们主要介绍如何使用python操作MySQL数据库. 准备 MySQL数据库使用的是上一节中的docker容器 “test-mysql”. Python 操作 MySQL 我们使用的IDE是 “神奇” 的 pycharm: 1. 首先新建一个python的项目,并且安装 “mysql-connector-python”. “mysql-connector-python” 是MySQL官方对于python的数据驱动,感兴趣的童鞋可以移步这里: https://dev.mysql

Android开发之数据持久化存储二

一.目标 以QQ登陆为例,继续完成昨天没有完成的任务,实现数据的存储和回显读取,并且学会往SD卡内存储信息 二.源程序代码 package com.example.qq_logindemo; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.Vie