ios 沙盒 NSCoding(相当于JAVA对象序列化) 归档 数据存储

简介: 通过NSCoding能实现像JAVA一样能够实现对象的序列化,可以保存对象到文件里。   NSCoding 跟其他存储方式略有不同,他可以存储对象 对象存储的条件是: 对象需要遵守 NSCoding 协议存储的时候需要 调用 encodeWithCoder 方法读取的时候需要调用initWit...

通过NSCoding能实现像JAVA一样能够实现对象的序列化,可以保存对象到文件里。

 

NSCoding 跟其他存储方式略有不同,他可以存储对象

对象存储的条件是: 对象需要遵守 NSCoding 协议
存储的时候需要 调用 encodeWithCoder 方法
读取的时候需要调用initWithCoder 方法
[NSKeyedArchiver archiveRootObject:stu toFile:path]; 存储 

NSKeyedUnarchiver unarchiveObjectWithFile:path 读取

对象代码

 

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. #import <Foundation/Foundation.h>  
  2.   
  3. @interface MJStudent : NSObject  <NSCoding>  
  4. @property (nonatomic, copy) NSString *no;  
  5. @property (nonatomic, assign) double height;  
  6. @property (nonatomic, assign) int age;  
  7. @end  



 

 

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. #import "MJStudent.h"  
  2. @interface MJStudent()   
  3. @end  
  4. @implementation MJStudent  
  5.   
  6. /** 
  7.  *  将某个对象写入文件时会调用 
  8.  *  在这个方法中说清楚哪些属性需要存储 
  9.  */  
  10. - (void)encodeWithCoder:(NSCoder *)encoder  
  11. {  
  12.     [encoder encodeObject:self.no forKey:@"no"];  
  13.     [encoder encodeInt:self.age forKey:@"age"];  
  14.     [encoder encodeDouble:self.height forKey:@"height"];  
  15. }  
  16.   
  17. /** 
  18.  *  从文件中解析对象时会调用 
  19.  *  在这个方法中说清楚哪些属性需要存储 
  20.  */  
  21. - (id)initWithCoder:(NSCoder *)decoder  
  22. {  
  23.     if (self = [super init]) {  
  24.         // 读取文件的内容  
  25.         self.no = [decoder decodeObjectForKey:@"no"];  
  26.         self.age = [decoder decodeIntForKey:@"age"];  
  27.         self.height = [decoder decodeDoubleForKey:@"height"];  
  28.     }  
  29.     return self;  
  30. }  
  31. @end  

 



保存读取

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
    1. - (IBAction)save {  
    2.     // 1.新的模型对象  
    3.     MJStudent *stu = [[MJStudent alloc] init];  
    4.     stu.no = @"42343254";  
    5.     stu.age = 20;  
    6.     stu.height = 1.55;  
    7.       
    8.     // 2.归档模型对象  
    9.     // 2.1.获得Documents的全路径  
    10.     NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];  
    11.     // 2.2.获得文件的全路径  
    12.     NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];  
    13.     // 2.3.将对象归档  
    14.     [NSKeyedArchiver archiveRootObject:stu toFile:path];  
    15. }  
    16.   
    17. - (IBAction)read {  
    18.     // 1.获得Documents的全路径  
    19.     NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];  
    20.     // 2.获得文件的全路径  
    21.     NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];  
    22.       
    23.     // 3.从文件中读取MJStudent对象  
    24.     MJStudent *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path];  
    25.       
    26.     NSLog(@"%@ %d %f", stu.no, stu.age, stu.height);  
    27. }  
如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
|
1月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
2月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
50 17
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第7天】Java零基础教学篇,手把手实践教学!
30 6
|
2月前
|
Oracle Java 关系型数据库
重新定义 Java 对象相等性
本文探讨了Java中的对象相等性问题,包括自反性、对称性、传递性和一致性等原则,并通过LaptopCharger类的例子展示了引用相等与内容相等的区别。文章还介绍了如何通过重写`equals`方法和使用`Comparator`接口来实现更复杂的相等度量,以满足特定的业务需求。
28 3
|
2月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
3月前
|
Java
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
本文介绍了Java中抽象类和抽象方法的使用,以及ArrayList的基本操作,包括添加、获取、删除元素和判断列表是否为空。
32 2
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
|
2月前
|
XML Java Maven
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
63 7
|
2月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第3天】Java零基础教学篇,手把手实践教学!
26 1
|
2月前
|
Java 数据安全/隐私保护
java类和对象
java类和对象
26 5