通过NSCoding能实现像JAVA一样能够实现对象的序列化,可以保存对象到文件里。
写了个小demo验证了下。
直接上demo吧。
UserEntity
//
// UserEntity.m
// NSCodingDemo
//
// Created by on 11-5-20.
// Copyright 2011 , Inc. All rights reserved.
//
#import "UserEntity.h"
#import "AddressEntity.h"
#define SAMPLEDATA_KEY_USERNAME (@"userName")
#define SAMPLEDATA_KEY_GENDER (@"gender")
#define SAMPLEDATA_KEY_AGE (@"age")
#define k_FRIENDS (@"frinds")
#define k_ADDRESS (@"address")
#define k_userEntity_addresses (@"addresses")
@implementation UserEntity
@synthesize userName = _userName;
@synthesize gender = _gender;
@synthesize age = _age;
@synthesize friends = _friends;
@synthesize address = _address;
@synthesize addresses = _addresses;
-(void)dealloc
{
[self.userName release];
[self.friends release];
[self.address release];
[self.addresses release];
[super dealloc];
}
- (void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeObject:self.userName forKey:SAMPLEDATA_KEY_USERNAME];
[coder encodeInt:self.age forKey:SAMPLEDATA_KEY_AGE];
[coder encodeBool:self.gender forKey:SAMPLEDATA_KEY_GENDER];
[coder encodeObject:self.friends forKey:k_FRIENDS];
[coder encodeObject:self.address forKey:k_ADDRESS];
[coder encodeObject:self.addresses forKey:k_userEntity_addresses];
}
- (id)initWithCoder:(NSCoder*)decoder
{
if (self = [super init])
{
if (decoder == nil)
{
return self;
}
self.userName = [decoder decodeObjectForKey:SAMPLEDATA_KEY_USERNAME];
self.gender = [decoder decodeBoolForKey:SAMPLEDATA_KEY_GENDER];
self.age = [decoder decodeIntForKey:SAMPLEDATA_KEY_AGE];
self.friends = [decoder decodeObjectForKey:k_FRIENDS];
self.address = [decoder decodeObjectForKey:k_ADDRESS];
self.addresses = [decoder decodeObjectForKey: k_userEntity_addresses];
}
return self;
}
@end
// UserEntity.m
// NSCodingDemo
//
// Created by on 11-5-20.
// Copyright 2011 , Inc. All rights reserved.
//
#import "UserEntity.h"
#import "AddressEntity.h"
#define SAMPLEDATA_KEY_USERNAME (@"userName")
#define SAMPLEDATA_KEY_GENDER (@"gender")
#define SAMPLEDATA_KEY_AGE (@"age")
#define k_FRIENDS (@"frinds")
#define k_ADDRESS (@"address")
#define k_userEntity_addresses (@"addresses")
@implementation UserEntity
@synthesize userName = _userName;
@synthesize gender = _gender;
@synthesize age = _age;
@synthesize friends = _friends;
@synthesize address = _address;
@synthesize addresses = _addresses;
-(void)dealloc
{
[self.userName release];
[self.friends release];
[self.address release];
[self.addresses release];
[super dealloc];
}
- (void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeObject:self.userName forKey:SAMPLEDATA_KEY_USERNAME];
[coder encodeInt:self.age forKey:SAMPLEDATA_KEY_AGE];
[coder encodeBool:self.gender forKey:SAMPLEDATA_KEY_GENDER];
[coder encodeObject:self.friends forKey:k_FRIENDS];
[coder encodeObject:self.address forKey:k_ADDRESS];
[coder encodeObject:self.addresses forKey:k_userEntity_addresses];
}
- (id)initWithCoder:(NSCoder*)decoder
{
if (self = [super init])
{
if (decoder == nil)
{
return self;
}
self.userName = [decoder decodeObjectForKey:SAMPLEDATA_KEY_USERNAME];
self.gender = [decoder decodeBoolForKey:SAMPLEDATA_KEY_GENDER];
self.age = [decoder decodeIntForKey:SAMPLEDATA_KEY_AGE];
self.friends = [decoder decodeObjectForKey:k_FRIENDS];
self.address = [decoder decodeObjectForKey:k_ADDRESS];
self.addresses = [decoder decodeObjectForKey: k_userEntity_addresses];
}
return self;
}
@end