将一个或多个OC对象写入文件/从文件读出

2024-08-28 16:38

本文主要是介绍将一个或多个OC对象写入文件/从文件读出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  利用NSCoding协议中的编码和解码方法进行实现对象实例的文件存储
1、过程描述:先将即将写入文件的类遵守NSCoping协议,然后在它的.m文件中添加协议中的
-(void)encodeWithCoder:(NSCoder *) aCoder编码方法和-(id)initWithCoder: (NSCoder *)aDecoder解码方法,在实现这些前提之后,就可以调用NSKeyedArchiver的archiveRootObject:(NSString *) toFile方法把对象写进指定的文件;或者调用NSKeyedUnarchiver的unarchiveObjectWithFile方法把对象从指定的文件中取出来.。
2、将一个对象存入文件所用方法剖析:
(1)编码方法。
实现NSCopying协议中的-(void)encodeWithCoder:(NSCoder *)aCoder方法,而NSCoder这个类提供了很多将各种数据类型写进文件的方法,而最常用最通用的方法是先把每个不是对象类型的成员变量通过NSNumber类或NSNumber对象的一些方法例如- (id)initWithChar:(char)value;  + (NSNumber *)numberWithInt:(int)value;  
+ (NSNumber *)numberWithDouble:(double)value;等转换为对象类型,并用aCoder调用NSCoder类的一个对象方法:- (void)encodeObject:(id)objv forKey:(NSString *)key;为每一个成员对象或封装后的成员对象分别提供一个唯一的字符串即键,一一进行编码。
(2)解码方法。实现NSCopying协议中的-(id)initWithCoder: (NSCoder *)aDecoder这个解码方法,它相当于一个初始化方法,所以要有if(self=[super init]){ // 具体实现 }语句,并且要在最后返回自身即最后添加 return self;语句。在实现语句中要用aDecoder调用NSCoder的对象方法- (id)decodeObjectForKey:(NSString *)key; 根据自己添加的键返回对应的成员对象或封装基本类型的对象。如果为封装基本数据成员类型的对象还要调用NSNumber类的一些方法如

- (char)charValue;  - (double)doubleValue;  - (int)intValue;等把自己封装的基本数据给提取出来。然后把这些对象和提取出来的数据一一赋给对应的成员变量,注意:如果对非封装基本数据类型的一些成员对象设置了retain或copy属性或以手动提供了这两种形式的set/get方法的话,在把从文件解码出来的数据(对象,基本类型)赋给这些对象成员时要调用提供的set方法进行赋值即"self.成员对象=解码出得对应对象"。就可以对对象数据进行解码提取了。            

(3)将对象写入文件的方法。利用NSKeyedArchiver类的如下类方法:
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path; 将创建好初始化过的对象写到指定的文件中,如果写入成功则返回YES,否则返回NO。
(4)从文件提取对象的方法。利用NSKeyedUnarchiver类的类方法:
+ (id)unarchiveObjectWithFile:(NSString *)path;从指定的文件读取数据赋值给一个新声明的对象名即可。

3、将多个对象存入同一个文件

(1)方式一   新建一个字典对象,为每个对象提供一个唯一的键存入这个字典对象。然后把这个字典对象利用NSKeyedArchiver类的类方法archiveRootObject:,,,toFile,,,方法写进指定的文件即可,从文件读取字典与从文件读取对象步骤相同,因为字典对象也是一个对象。具体步骤上同。

(2)方式二  新建一个NSArray数组对象,同时把多个对象存入数组。然后把数组存入指定的文件即可,从文件读取多个对象其实就是从文件读取一个存放多个对象的数组对象。具体步骤全都一样。

(3)注意事项:数组可以用快速遍历一次显示多个读出对象的内容。但字典不可以用快速遍历,但是可以用枚举进行迭代,过程如下:新建一个枚举迭代器 要利用字典对象调用它的一个对象方法objectEnumerator创建一个NSEnumerator对象假设为em,即NSEnumerator *em=[dictionary objectEnumerator]; 在用while循环结构对迭代器的

nextObject方法进行循环调用即可实现迭代。即 id temp;  while(temp=[em nextObject]){

 // 调用输出成员的方法或已经重写的description方法或者直接打印对象的成员变量值

}

4、获取系统根路径的方法:直接调用NSHomeDirectory方法即可即  NSHomeDirectory( );

5、切记:谁的事情由谁来做。主要体现如下几个方面,举例如下:

(1&

这篇关于将一个或多个OC对象写入文件/从文件读出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115315

相关文章

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

golang 对象池sync.Pool的实现

《golang对象池sync.Pool的实现》:本文主要介绍golang对象池sync.Pool的实现,用于缓存和复用临时对象,以减少内存分配和垃圾回收的压力,下面就来介绍一下,感兴趣的可以了解... 目录sync.Pool的用法原理sync.Pool 的使用示例sync.Pool 的使用场景注意sync.

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

Java实例化对象的​7种方式详解

《Java实例化对象的​7种方式详解》在Java中,实例化对象的方式有多种,具体取决于场景需求和设计模式,本文整理了7种常用的方法,文中的示例代码讲解详细,有需要的可以了解下... 目录1. ​new 关键字(直接构造)​2. ​反射(Reflection)​​3. ​克隆(Clone)​​4. ​反序列化