*************
常用归档接档方法 都是一一对应的
归档
@interface NSKeyedArchiver : NSCoder
+ (NSData *)archivedDataWithRootObject:(id)rootObject;
归档单个对象
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;
归档单个文档到对象
- (id)initForWritingWithMutableData:(NSMutableData *)data;
初始化归档对象 以后encode的都放到data中
- (void)encodeObject:(id)objv forKey:(NSString *)key;
- (void)encodeConditionalObject:(id)objv forKey:(NSString *)key;
- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key;
- (void)encodeInt:(int)intv forKey:(NSString *)key;// native int
- (void)encodeInt32:(int32_t)intv forKey:(NSString *)key;
- (void)encodeInt64:(int64_t)intv forKey:(NSString *)key;
- (void)encodeFloat:(float)realv forKey:(NSString *)key;
- (void)encodeDouble:(double)realv forKey:(NSString *)key;
- (void)encodeBytes:(const uint8_t *)bytesp length:(NSUInteger)lenv forKey:(NSString *)key;
各种归档对象
- (void)finishEncoding;
结束归档 归档最后是必须要写的
解档 和归档的方法都是一一对应的
@interface NSKeyedUnarchiver : NSCoder
+ (id)unarchiveObjectWithData:(NSData *)data;
+ (id)unarchiveObjectWithFile:(NSString *)path;
- (id)initForReadingWithData:(NSData *)data;
- (id)decodeObjectForKey:(NSString *)key;
- (BOOL)decodeBoolForKey:(NSString *)key;
- (int)decodeIntForKey:(NSString *)key;// may raise a range exception
- (int32_t)decodeInt32ForKey:(NSString *)key;
- (int64_t)decodeInt64ForKey:(NSString *)key;
- (float)decodeFloatForKey:(NSString *)key;
- (double)decodeDoubleForKey:(NSString *)key;
- (const uint8_t *)decodeBytesForKey:(NSString *)key returnedLength:(NSUInteger *)lengthp NS_RETURNS_INNER_POINTER;// returned bytes immutable, and they go away with the unarchiver, not the containing autorlease pool
- (void)finishDecoding;
结束解档 一般情况下是不写这个的
如果对自定义对象进行归档 需要让自定义对象遵守<</SPAN>NSCoding>协议
实现两个协议方法
- (void)encodeWithCoder:(NSCoder *)aCoder
- (id)initWithCoder:(NSCoder *)aDecoder
*******************
注:xib其实就是一个归档
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
}
return self;
}
所以 如果写了一个view 被使用到了xib中 要再重写这个初始化方法 如下:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self makeView];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self makeView];
}
return self;
}