Objective-C 学习笔记10 NSCoding与归档
对于自定义的Class,需要实现NSCoding协议。还记得复制类额时候 也是要实现类似协议NSCopying,说明再固有框架不变的情况下,我们可以通过protocol(协议)来改变或实现不同的功能效果。
NSCoding我理解的就是通过一个公用的方法进行转码,之后统一进行序列化成文件,再通过统一解码进行反序列化。
来自互联网的实例
一个NOTE类,
头文件
// // Note.h // sample005 // // Created by echoliu on 13-1-26. // Copyright (c) 2013年 echoliu. All rights reserved. // #import <Foundation/Foundation.h> @interface Note : NSObject{ NSString *title; NSString *author; BOOL published; } @property (nonatomic,copy) NSString *title; @property (nonatomic,copy) NSString *author; @property (nonatomic) BOOL pubished; @end
实现文件
// // Note.m // sample005 // // Created by echoliu on 13-1-26. // Copyright (c) 2013年 echoliu. All rights reserved. // #import "Note.h" @implementation Note @synthesize title,author,pubished; @end
加入NSCoding后
头文件
// // Note.h // sample005 // // Created by echoliu on 13-1-26. // Copyright (c) 2013年 echoliu. All rights reserved. // #import <Foundation/Foundation.h> @interface Note : NSObject<NSCoding>{ NSString *title; NSString *author; BOOL published; } @property (nonatomic,copy) NSString *title; @property (nonatomic,copy) NSString *author; @property (nonatomic) BOOL pubished; @end
实现文件
// // Note.m // sample005 // // Created by echoliu on 13-1-26. // Copyright (c) 2013年 echoliu. All rights reserved. // #import "Note.h" @implementation Note @synthesize title,author,pubished; // 解码 -(id)initWithCoder:(NSCoder *)aDecoder{ if(self=[super init]){ self.title=[aDecoder decodeObjectForKey:@"title"]; self.author=[aDecoder decodeObjectForKey:@"author"]; self.pubished=[aDecoder decodeBoolForKey:@"published"]; } return self; } //编码 -(void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:title forKey:@"title"]; [aCoder encodeObject:author forKey:@"author"]; [aCoder encodeBool:published forKey:@"published"]; } @end
main中的测试
浙公网安备 33010602011771号