iOS学习(OC语言)知识点整理

一、归档与解归档的操作

1)归档是一个过程,将一个或多个对象存储起来,以便以后可以还原,包括将对象存入文件,以后再读取

将数据对象归档成plist文件

2)plist文件中只能存放:NSString、NSDate、NSNumber、Bool、NSData、NSArray、NSDictionary

并且NSArray和NSDictionary中只能是以上的类型

3)归档存放时数据是什么类型,读取数据时就用什么类型的数据接收。

4)归档不能直接操作自定义对象类型的数据。

5)归档与解归档操作实例代码 :

 //创建一个二维数组(数组中每个元素又是一个数组对象)
NSMutableArray *array1=[[NSMutableArray alloc]init];
for(int i=;i<;i++){
[array1 addObject:[NSString stringWithFormat:@"str%d",i+]];
} NSMutableArray *array2=[[NSMutableArray alloc]init];
for(int i=;i<;i++){
[array2 addObject:[NSNumber numberWithInt:arc4random()%]];
} NSArray *bigArray=@[array1,array2];
//将数组对象写入文件,(先写入内存中,如果写入成功,马上存入文件)
[bigArray writeToFile:@"/Users/kingkong/Desktop/day08/array.plist" atomically:YES]; //将plist文件的内容直接读取出存入数组
NSArray *newArray=[[NSArray alloc]initWithContentsOfFile:@"/Users/kingkong/Desktop/day08/array.plist"];
NSLog(@"%@",newArray); NSArray *emails=@[@"zhangsan@163.com",@"zhangsan@qq.com"];
//创建一个字典对象
NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan",@"name",@"",@"password",emails,@"email", nil];
//将字典对象写入文件
[dict writeToFile:@"/Users/kingkong/Desktop/day08/dict.plist" atomically:YES]; //将plist文件的内如读取出来存入字典
NSDictionary *newDict=[NSDictionary dictionaryWithContentsOfFile:@"/Users/kingkong/Desktop/day08/dict.plist"];
NSLog(@"%@",newDict);

6)归档与解归档自定义类数据 实例代码:

1、定义一个Birthday类,在.h文件中遵守NSCoding 协议 例如:

 @interface Birthday : NSObject<NSCoding>
//出生日期类,年、月、日
@property(nonatomic,assign)int year;
@property(nonatomic,assign)int month;
@property(nonatomic,assign)int day;
@end

2、在.m文件中实现NSCoding协议方法 例如:

 #import "Birthday.h"
@implementation Birthday
//在归档时自动调用这个方法,将所有的成员变量编码(给成员变量设置相应的键)
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeInt:_year forKey:@"year"];
[aCoder encodeInt:_month forKey:@"month"];
[aCoder encodeInt:_day forKey:@"day"];
} -(id)initWithCoder:(NSCoder *)aDecoder
{
if(self=[super init]){
_year=[aDecoder decodeIntForKey:@"year"];
_month=[aDecoder decodeIntForKey:@"month"];
_day=[aDecoder decodeIntForKey:@"day"];
}
return self;
}
@end

3、在 main 文件中执行归档与解归档方法 例如:

 Birthday *b=[[Birthday alloc]init];
b.year=;
b.month=;
b.day=; //b必须遵守归档协议
NSString *path=@"/Users/kingkong/Desktop/day09/Birthday.data";
//执行归档操作
BOOL ret=[NSKeyedArchiver archiveRootObject:b toFile:path];
if(ret){
//执行解归档操作
Birthday *b2=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
NSLog(@"year:%i",b2.year);
}

7)将多个对象归档到一个文件中 实例代码
   
 1、定义一个Person类 在.h文件中遵守NSCoding协议 例如:

  #import <Foundation/Foundation.h>
//如果要对对象进行归档,必须遵守归档协议,实现协议中规范的方法
@interface Person : NSObject<NSCoding>
@property(nonatomic,copy)NSString *name;
@property(nonatomic,assign)int age;
-(void)print;
@end

2、在.m中实现协议方法 例如:

   #import "Person.h"
@implementation Person
//在归档时自动调用这个方法,将所有的成员变量编码(给成员变量设置相应的键)
- (void)encodeWithCoder:(NSCoder *)aCoder
{
NSLog(@"%@",NSStringFromSelector(_cmd));
//encodeInt 用于整型数据 encodeObject 用于字符串或对象
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeInt:_age forKey:@"age"];
}
//解归档时自动调用此方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
//如果父类也遵守了归档协议,self=[super initWithCode:aDecode]
if(self=[super init]){
//根据编码时的键取值decodeIntForKey 用于整型数据 decodeObjectForKey 用于字符串或对象
_name=[aDecoder decodeObjectForKey:@"name"];
_age=[aDecoder decodeIntForKey:@"age"];
}
return self;
}
-(void)print
{
NSLog(@"name:%@,age:%d",_name,_age);
}
@end

3、在main文件中执行方法 例如:

 Person *p1=[[Person alloc]init];
p1.name=@"kingkong";
p1.age=; NSArray *array1=@[@"red",@"blue",@"yellow"]; //创建一个对象的缓冲区空间
NSMutableData *mutableData=[[NSMutableData alloc]init];
//创建一个归档器,关联一个对象的缓冲区
NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc]initForWritingWithMutableData:mutableData];
//将对象编码后存入缓冲区
[archiver encodeObject:p1 forKey:@"person"];
[archiver encodeObject:array1 forKey:@"array"];
//编码结束
[archiver finishEncoding];//
//将缓冲区中的数据写入到文件中
NSString *path=@"/Users/kingkong/Desktop/day09/doc.data";
BOOL ret=[mutableData writeToFile: path atomically:YES];
NSLog(@"ret=%d",ret); //解归档操作
NSData *data=[NSData dataWithContentsOfFile: path];
//创建一个解归档器对象指定数据所在的缓冲区
NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc]initForReadingWithData:data];
//使用解归档器提取数据
Person *p2=[unarchiver decodeObjectForKey:@"person"];
NSArray *array2=[unarchiver decodeObjectForKey:@"array"];
//解归档结束
[unarchiver finishDecoding];
//NSLog(@"%@,%d",p2.name,p2.age);
[p2 print];
NSLog(@"%@",array2);

iOS阶段学习第18天笔记(Plist-Archiver-归档与解归档操作)的更多相关文章

  1. iOS 阶段学习第七天笔记(函数、递归)

     iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1  形参名1,形参类型2   形参名2 ...

  2. iOS阶段学习第29天笔记(UITextField的介绍)

    iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField  初始化实例代码: //创建一个UIt ...

  3. iOS阶段学习第20天笔记(MRC内存管理)

    iOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效      OC中采用 ...

  4. iOS阶段学习第15天笔记(NSDate操作)

    iOS学习(OC语言)知识点整理 一.OC关于NSDate类的操作实例代码 //默认直接显示对象,显示的是格林威治时间 //获取当前日期时间的实例方法 NSDate *date1=[[NSDate a ...

  5. iOS阶段学习第14天笔记(NSString与NSMutableString)

    iOS学习(OC语言)知识点整理 一.OC字符串的操作 1)OC中字符串分为两种: 1.不可变字符串NSString:不能修改对象内容,但是可以改变对象的指针. 2.可变字符串NSMutableStr ...

  6. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  7. iOS阶段学习第四天笔记(循环)

    iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...

  8. iOS阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  9. iOS 阶段学习第四天笔记(循环)

    iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...

随机推荐

  1. 测试博文中添加可执行JS代码

    昨天申请开通了博客园的JS权限,今天来看看效果. 测试执行JS 测试执行JS // 运行

  2. Git Day03,GitHub 1st

    1st, SSH key: Add a pic @ Sep 18 2016 20:26 To note the configuration process on Linux: 2nd,github网站 ...

  3. 关于js内部运行机制的一本好书

    读<单页Web应用一书>,第二章讲了js内部运行机制,感觉棒极了.之前读<你不知道的js>,看的云里雾里,似懂非懂.没想到单页Web一书将此内容讲的如此通俗易懂,好多困惑已久的 ...

  4. Kafka与Logstash的数据采集对接 —— 看图说话,从运行机制到部署

    基于Logstash跑通Kafka还是需要注意很多东西,最重要的就是理解Kafka的原理. Logstash工作原理 由于Kafka采用解耦的设计思想,并非原始的发布订阅,生产者负责产生消息,直接推送 ...

  5. Atitit  ocr识别原理 与概论 attilax总结

    Atitit  ocr识别原理 与概论 attilax总结 1.1. Ocr的过程与流程1 1.2. OCR不同技术细分略有不同,但大概原理是一样的. 即主要技术过程是:二值化(又叫归一化)----- ...

  6. Atitit.java图片图像处理attilax总结  BufferedImage extends java.awt.Image获取图像像素点image.getRGB(i, lineIndex); 图片剪辑/AtiPlatf_cms/src/com/attilax/img/imgx.javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片 atitit 图片去噪算法的原理与

    Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...

  7. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  8. linux下配置mysql默认编码utf8

    linux下配置mysql默认编码utf8 下面是需要在对应地方加入的配置 [client] default-character-set=utf8 [mysqld] character-set-ser ...

  9. KnockoutJS 3.X API 第三章 计算监控属性(1) 使用计算监控属性

    计算监控属性(Computed Observables) 如果你有一个监控属性firstName,和另一个lastName,你要显示的全名?可以使用计算监控属性来实现-它依赖于一个或多个其他监控属性, ...

  10. 在Windows系统搭建.NET Core环境并创建运行ASP.NET网站

    微软于6月27日在红帽DevNation峰会上 正式发布了.NET Core 1.0.ASP.NET 1.0和Entity Framework Core 1.0,其将全部支持Windows.OS X和 ...