/* NSCoder functions taken from:
* http://davedelong.com/blog/2009/04/13/aspect-oriented-programming-objective-c
*/
- (id) initWithCoder:(NSCoder *)decoder {
if ([super respondsToSelector:@selector(initWithCoder:)] && ![self isKindOfClass:[super class]]) {
self = [super performSelector:@selector(initWithCoder:) withObject:decoder];
} else {
self = [super init];
}
if (self == nil) { return nil; }
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
unsigned int numIvars = 0;
Ivar *ivars = class_copyIvarList([self class], &numIvars);
for(int i = 0; i < numIvars; i++) {
Ivar thisIvar = ivars[i];
NSString *key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];
id value = [decoder decodeObjectForKey:key];
if (value == nil) { value = [NSNumber numberWithFloat:0.0]; }
[self setValue:value forKey:key];
}
if (numIvars > 0) { free(ivars); }
[pool drain];
return self;
}
- (void) encodeWithCoder:(NSCoder *)encoder {
if ([super respondsToSelector:@selector(encodeWithCoder:)] && ![self isKindOfClass:[super class]]) {
[super performSelector:@selector(encodeWithCoder:) withObject:encoder];
}
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
unsigned int numIvars = 0;
Ivar *ivars = class_copyIvarList([self class], &numIvars);
for (int i = 0; i < numIvars; i++) {
Ivar thisIvar = ivars[i];
NSString *key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];
id value = [self valueForKey:key];
[encoder encodeObject:value forKey:key];
}
if (numIvars > 0) { free(ivars); }
[pool drain];
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。