首页 技术 正文
技术 2022年11月6日
0 收藏 606 点赞 288 浏览 4049 个字

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);
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,918
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,444
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,255
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,069
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,701
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,741