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中的测试

 

 

posted on 2013-01-26 09:48  ios开发达人  阅读(2069)  评论(0)    收藏  举报