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

时间:2022-03-18 20:43:10

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

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

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

NSKeyedUnarchiver unarchiveObjectWithFile:path 读取

对象代码

  1. #import <Foundation/Foundation.h>
  2. @interface MJStudent : NSObject  <NSCoding>
  3. @property (nonatomic, copy) NSString *no;
  4. @property (nonatomic, assign) double height;
  5. @property (nonatomic, assign) int age;
  6. @end
  1. #import "MJStudent.h"
  2. @interface MJStudent()
  3. @end
  4. @implementation MJStudent
  5. /**
  6. *  将某个对象写入文件时会调用
  7. *  在这个方法中说清楚哪些属性需要存储
  8. */
  9. - (void)encodeWithCoder:(NSCoder *)encoder
  10. {
  11. [encoder encodeObject:self.no forKey:@"no"];
  12. [encoder encodeInt:self.age forKey:@"age"];
  13. [encoder encodeDouble:self.height forKey:@"height"];
  14. }
  15. /**
  16. *  从文件中解析对象时会调用
  17. *  在这个方法中说清楚哪些属性需要存储
  18. */
  19. - (id)initWithCoder:(NSCoder *)decoder
  20. {
  21. if (self = [super init]) {
  22. // 读取文件的内容
  23. self.no = [decoder decodeObjectForKey:@"no"];
  24. self.age = [decoder decodeIntForKey:@"age"];
  25. self.height = [decoder decodeDoubleForKey:@"height"];
  26. }
  27. return self;
  28. }
  29. @end

保存读取

    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. // 2.归档模型对象
    8. // 2.1.获得Documents的全路径
    9. NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    10. // 2.2.获得文件的全路径
    11. NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];
    12. // 2.3.将对象归档
    13. [NSKeyedArchiver archiveRootObject:stu toFile:path];
    14. }
    15. - (IBAction)read {
    16. // 1.获得Documents的全路径
    17. NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    18. // 2.获得文件的全路径
    19. NSString *path = [doc stringByAppendingPathComponent:@"stu.data"];
    20. // 3.从文件中读取MJStudent对象
    21. MJStudent *stu = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    22. NSLog(@"%@ %d %f", stu.no, stu.age, stu.height);
    23. }

ios 沙盒 NSCoding(相当于JAVA对象序列化) 归档 数据存储的更多相关文章

  1. iOS 沙盒目录结构介绍

    iOS系统中,每个应用都有自己的沙盒,且应用只能访问其对应的沙盒目录下面的文件.当然,在用户授权的情况下,应用也可以访问其他目录下面的文件.比如,用户授权情况下,应用可以访问相册.通讯录.在开发中,经 ...

  2. iOS沙盒机制介绍

    一.沙盒机制 沙盒的概念:沙盒是每一个iOS应用程序都会自动创建的一个文件系统目录(文件夹),而且沙盒还具有独立.封闭.安全的特点. 沙盒机制 iOS中的沙盒不仅仅是一个文件目录,TA其实更是一种安全 ...

  3. iOS - 沙盒与目录

    NSFileManager NSBundle Class Cluster 采用Tagged Pointer的字符串 NSPathStore iOS证书ipa包重签名探究 url 结构 1. iOS 沙 ...

  4. iOS沙盒(sandbox)

    iOS沙盒 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,默认下iOS应用只能访问自己的沙盒 extenaion是iOS8新开放的一种对几个固定系统区域的扩展机制,它可以在一定程度上弥补 ...

  5. IOS 学习之 iOS沙盒&lpar;sandbox&rpar; 介绍 沙盒机制 文件操作&lpar;一&rpar;

    1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...

  6. iOS 阶段学习第25天笔记(iOS沙盒机制介绍)

    iOS学习(OC语言)知识点整理 一.iOS沙盒机制介绍 1)概念: 每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒 ...

  7. iOS沙盒目录结构解析

    iOS沙盒目录结构解析 原文地址:http://blog.csdn.net/wzzvictory/article/details/18269713     出于安全考虑,iOS系统的沙盒机制规定每个应 ...

  8. iOS沙盒机制介绍,Block 的介绍

    一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...

  9. IOS沙盒Files目录说明和常用操作

    Ios沙盒目录清单 1 Documents 用于存储用户生成的文件.其他数据及其他程序不能重新创建的文件,默认文件通过iCloud自动备份.如果不需要iCloud备份,则设置标记 NSURLIsExc ...

随机推荐

  1. 《转载》GET,POST,PUT,DELETE的区别

    本文转载自:转载请说明出处,谢谢[hyddd(http://www.cnblogs.com/hyddd/)] Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT, ...

  2. Linux &sol;proc&sol;&dollar;pid部分内容详解

    auxv /proc/[pid]/auxv包含传递给进程的ELF解释器信息,格式是每一项都是一个unsigned long长度的ID加上一个unsigned long长度的值.最后一项以连续的两个0x ...

  3. 【原创】开源Math&period;NET基础数学类库使用&lpar;13&rpar;C&num;实现其他随机数生成器

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  4. SVN更新报错

    将服务器SVN文件更新到本地是出现下图错误 报错中已经提示可以通过clean up来清理,若直接执行release lock,则不会解决问题. 原因:本地的项目中存在过期的工作副本 解决办法:选择该文 ...

  5. java 级联删除文件夹下的所有文件

    public void deletefile(String delpath) throws Exception { try { File file = new File(delpath); // 当且 ...

  6. 使用git推送代码到开源中国以及IDEA环境下使用git

    使用git推送代码到开源中国以及IDEA环境下使用git 在学习Java的过程中我们会使用到git这个工具来将我们本周所编写的代码上传到开源中国进行代码托管,而在使用git的时候有很多的同学由于不会操 ...

  7. 从零开始学android开发-四大组件之一 Activity

    1.Activity是Android四大组件(Application Components)之一,简单来说Activity就是平常所见到的用户界面,一般情况下,一个Activity所占的窗口是满屏的, ...

  8. HDU-4689 Derangement

    太*了: 题目意思:初始队列是1,2, 3.......n :在打乱这个队列切保证每个数字都不在原来的位置上的情况下给出一个具有+,- 的队列: 被打乱的队列 和 原来队列 对应位置的大小的关系是那 ...

  9. Flex回声消除的最佳方法

    Adobe Flash Player 已经成为音频和视频播放的非常流行的工具.实际上,目前大多数因特网视频均使用 Flash Player观看. Flash Player 通过将许多技术进行组合可以提 ...

  10. VS2010发布、打包安装程序&lpar;超全超详细&rpar;

    1. 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1.“应 ...