OC中如果要将自定义类型的对象保存到文件中,必须进行以下三个条件:

想要把存放自定义类型的数组进行 持久化(就是将内存中的临时数据以文件<数据库等>的形式写到磁盘上)必须满足:

1. 自定义对象必须要序列化(将数据有序的存放)

2. 需要使用归档来进行持久化

3. 如果要加载持久化文件需要进行反序列化(就是将有序存放的数据读取并变成自定义对象)

第一要将自定义类型序列化以及第三步并将文件反序列化必须实现OC中的  <NSCoding>协议。

以Student类为例

@interface Student : NSObject<NSCoding>
@property(nonatomic,copy)NSString * name;
@property(nonatomic,copy)NSString * pwd;
@end

进行序列化的方法为

-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.pwd forKey:@"pwd"];
}

进行反序列化的方法为:

-(id)initWithCoder:(NSCoder *)aDecoder
{
self= [super init];
if(self)
{
self.name=[aDecoder decodeObjectForKey:@"name"];
self.pwd=[aDecoder decodeObjectForKey:@"pwd"];
}
return self;
}

需要注意的是,我们在类的声明文件中并不需要声明这两个文件,因为我们只在本类中使用这两个方法,所以我们只需要在实现文件中实现这两个方法就可以了。

值得注意的是归档操作在外面实现这个协议的两个方法时就已经由系统实现,因此我们并不需要实现归档操作。我们需要的仅仅是将文件写入到指定的文件中,以及将该文件读取出来。我们可以理解为,我们在实现读取和写入的方法的过程中,实现了序列化和反序列化操作。进而实现了归档操作。写入文件和读取文件的代码如下:

        [NSKeyedArchiver archiveRootObject:stuArr toFile:@"/Users/Administrator/Desktop/4.plist"];
[NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/Administrator/Desktop/4.plist"];

遍历该文件所包含的对象即可得到文件中所包含的对象的所有属性

        for(Student * s in stuArr)
{
NSLog(@"%@,%@",s.name,s.pwd);
}

OC中保存自定义类型对象的持久化方法的更多相关文章

  1. GreenDao存储自定义类型对象解决方案(转)

    最近公司项目选用GreenDao作为Android客户端本地数据库的对象关系映射框架.对于GreenDao虽然以往也有简单用过,但这还是笔者第一次在实际业务中使用.碰到了题目所述的两个问题,虽然在Tu ...

  2. 关于void*类型的用法(相当于OC中的id类型)

    关于void*类型的用法(相当于OC中的id类型) 1.C++语言在对于void* 类型的使用很特别,因为void* 可以间接引用任何其他数据类型的指针,比如int*.float*甚至抽象数据类型的指 ...

  3. springmvc中如何自定义类型转换器

    package com.hope.utils;import org.springframework.core.convert.converter.Converter;import org.spring ...

  4. iOS中常用的四种数据持久化方法简介

    iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 ...

  5. 2017.9.2Java中的自定义类型的定义及使用&&自定义类的内存图

    今日内容介绍 1.自定义类型的定义及使用 2.自定义类的内存图 3.ArrayList集合的基本功能 4.随机点名器案例及库存案例代码优化 01引用数据类型_类 * A: 数据类型 * a: java ...

  6. 浅析HashSet add() 方法存储自定义类型对象的过程

    一.自定义一个Student类 package date0504; public class Student { private String id; Student(String id){ this ...

  7. OC中结构体作为对象属性

    在OC中结构体有时候也作为对象的属性 类的定义 #import <Foundation/Foundation.h> typedef struct{ int year; int month; ...

  8. OC基础--OC中的类方法和对象方法

    PS:个人感觉跟C#的静态方法和非静态方法有点类似,仅仅是有点类似.明杰老师说过不要总跟之前学过的语言做比较,但是个人觉得,比较一下可以加深印象吧.重点是自己真的能够区分开! 一.OC中的对象方法 1 ...

  9. OC中的枚举类型

    背景 一直对OC中的位移操作枚举不太理解,查找到两篇介绍OC中枚举的文章,觉得很不错. 什么是位移操作枚举呢? typedef NS_OPTIONS(NSUInteger, UIViewAutores ...

随机推荐

  1. pycharm中添加python3 的环境变量

    i卡是HDKJHA{{sadfsdafdsafd.jpg(uploading...)}}S{{53ad37a938001.jpg(uploading...)}}

  2. 初窥AST

    一个简单的AST示例: AST结构: 里面有program.name.loc.type.comments.tokens 先看program: 重点关注program里面的body这个数组: JS引擎中 ...

  3. UI自动化之特殊处理一(iframe\句柄\鼠标键盘)

    iframe\句柄\鼠标键盘是一些比较特殊的事件,需要特殊处理 目录 1.iframe 2.句柄(handle) 3.鼠标键盘 1.iframe iframe 是内嵌的网页元素,也可以说是内嵌的框架, ...

  4. vue打包详情

    说明 本文代码中的配置基于vue-cli2 需求 在实际开发中我们可能有测试环境一套请求API 和 正式环境一套API,尤其是两个环境的域名不同时,就需要我们分环境打不同配置的包 了解 webpack ...

  5. vue通信之子父组件通信

    子父组件通信: 创建一个父组件 Home , 创建一个子组件 Head Home 组件: import Head from "./Head.vue" // 引入 Head 组件 c ...

  6. HDFS数据流——读数据流程

    HDFS读数据流程 假设客户端请求下载文件/user/atguigu/ss.avi,HDFS读数据流程如下: 1)客户端向namenode请求下载文件,namenode通过查询元数据,找到文件所有文件 ...

  7. [HNOI2016]树(可持久化线段树+树上倍增)

    [HNOI2016]树(可持久化线段树+树上倍增) 题面 给出一棵n个点的模板树和大树,根为1,初始的时候大树和模板树相同.接下来操作m次,每次从模板树里取出一棵子树,把它作为新树里节点y的儿子.操作 ...

  8. 小白学Python(15)——pyecharts 绘制树形图表 Tree

    Tree-基本示例 import json import os from pyecharts import options as opts from pyecharts.charts import P ...

  9. k3 cloud列表中出现很多空白

    解决办法:找到单据体:过滤面板默认隐藏打勾

  10. Asp.Net MVC 5使用Identity之简单的注册和登陆

    由于.Net MVC 5登陆和注册方式有很多种,但是Identity方式去实现或许会更简单更容易理解 首先新建一个项目 其次如下选择Empty和MVC的选项 然后打开NuGet包管理器分别安装几个包 ...