建五金方面的网站,免费网络爬虫网站,1040视频app,专线网站建设1、NSData归档多个对象
一、之前我写的学习笔记都是归档一个对象#xff0c;如果需要归档多个对象我们需要借助NSData
二、步骤 1#xff09;、NSMutableData作为参数#xff0c;构建 NSKeyedArchiver对象 2#xff09;、调用NSKeyedArchiver的encodeXXX 3)、调用NSKeyed…1、NSData归档多个对象
一、之前我写的学习笔记都是归档一个对象如果需要归档多个对象我们需要借助NSData
二、步骤 1、NSMutableData作为参数构建 NSKeyedArchiver对象 2、调用NSKeyedArchiver的encodeXXX 3)、调用NSKeyedArchiver的finishEncoding方法 4)、NSMutableData保存到文件 2、归档对象实现深复制 我们知道深复制就是复制对象和原始对象没有任何公用的部分修改复制对象的值不会对原始对象产生影响。
步骤
1、NSKeyedArchiver的archivedDataWithRootObject
2、NSKeyedUnarchiver的unarchiveObjectWithData 3、实现Demo IApple.h
#import Foundation/Foundation.h
#ifndef IApple_h
#define IApple_h
interface IApple : NSObject NSCoding
property (nonatomic, copy) NSString *color;
property (nonatomic, assign) double weight;
property (nonatomic, assign) int size;
-(id)initWithColor:(NSString *) color weight:(double) weight size:(int) size;
end#endif /* IApple_h */ IApple.m
#import IApple.h
#import Foundation/Foundation.h
implementation IApple
synthesize color _color;
synthesize weight _weight;
synthesize size _size;
-(id)initWithColor:(NSString *) color weight:(double) weight size:(int) size
{if (self [super init]){self.color color;self.weight weight;self.size size;}return self;
}
-(NSString *)description
{return [NSString stringWithFormat:IApple [color %, weight %g, _size %d], self.color, self.weight, self.size];
}-(void)encodeWithCoder:(NSCoder *)aCoder
{[aCoder encodeObject:_color forKey:color];[aCoder encodeDouble:_weight forKey:weight];[aCoder encodeInt:_size forKey:size];
}
-(id) initWithCoder:(NSCoder *)aDecoder
{_color [aDecoder decodeObjectForKey:color];_weight [aDecoder decodeDoubleForKey:weight];_size [aDecoder decodeIntForKey:size];return self;
}endmain.m
#import IApple.h
int main(int argc, char * argv[]) {autoreleasepool {NSDictionary *dict [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:80], java, [NSNumber numberWithInt:90], c, [NSNumber numberWithInt:70], oc, [NSNumber numberWithInt:100], c,nil];NSSet *set [NSSet setWithObjects:java, ios, c, oc, nil];IApple *apple [[IApple alloc] initWithColor:red weight:50 size:20];NSMutableData *data [NSMutableData data];NSKeyedArchiver *arch [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];//归档对象[arch encodeObject:dict forKey:dict];[arch encodeObject:set forKey:set];[arch encodeObject:apple forKey:apple];//结束归档[arch finishEncoding];//在document目录下创建一个chenyu.txt空文件NSArray *docPaths NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *path [docPaths objectAtIndex:0];NSLog(document path:%, path);NSFileManager *fileManager [NSFileManager defaultManager];NSString *chenyuPath [path stringByAppendingPathComponent:chenyu.txt];BOOL isSuccess [fileManager createFileAtPath:chenyuPath contents:nil attributes:nil];if (isSuccess) {NSLog(make chenyu.txt success);} else {NSLog(make chenyu.txt fail);}//归档对象到chenyu.txt文件if([data writeToFile:chenyuPath atomically:YES] YES){NSLog(归档对象成功);}else{NSLog(归档对象失败);}//读取归档对象NSData *readData [NSData dataWithContentsOfFile:chenyuPath];NSKeyedUnarchiver *unArch [[NSKeyedUnarchiver alloc] initForReadingWithData:readData];NSDictionary *readDict [unArch decodeObjectForKey:dict];NSSet *readSet [unArch decodeObjectForKey:set];NSSet *readApple [unArch decodeObjectForKey:apple];NSLog(readDict is:%, readDict);NSLog(readSet is:%, readSet);NSLog(readApple is %, readApple);//使用归档对戏实现深复制 深复制就是复制对象和本身对象没有任何公用部分所以修改复制对象的属性不会影响原始对象的属性NSDictionary *diction [NSDictionary dictionaryWithObjectsAndKeys:[[IApple alloc] initWithColor:red weight:50 size:20], one, [[IApple alloc] initWithColor:green weight:60 size:21], two, nil];//对象归档NSData *data1 [NSKeyedArchiver archivedDataWithRootObject:diction];//回复对象NSDictionary *dictCopy [NSKeyedUnarchiver unarchiveObjectWithData:data1];IApple *app [dictCopy objectForKey:one];[app setColor:green];IApple *app1 [diction objectForKey:one];NSLog(app1 color is:%, app1.color);}
} 4、运行结果
2018-07-22 19:34:11.2588160800 cyTest[62704:16613816] document path:*****/3FF9B833-FAF8-4C30-A855-3D40A4EAE8A6/data/Containers/Data/Application/6AD520C9-3A99-45B5-A2F9-4E4D7CA77486/Documents
2018-07-22 19:34:11.2695390800 cyTest[62704:16613816] make chenyu.txt success
2018-07-22 19:34:11.2718980800 cyTest[62704:16613816] 归档对象成功
2018-07-22 19:34:11.2729760800 cyTest[62704:16613816] readDict is:{c 90;c 100;java 80;oc 70;
}
2018-07-22 19:34:11.2732430800 cyTest[62704:16613816] readSet is:{(c,java,ios,oc
)}
2018-07-22 19:34:11.2736020800 cyTest[62704:16613816] readApple is IApple [color red, weight 50, _size 20]
2018-07-22 19:34:11.2741500800 cyTest[62704:16613816] app1 color is:red