溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Objective C對(duì)象序列化通用的NSCoder成員方法

發(fā)布時(shí)間:2020-08-10 14:51:07 來(lái)源:網(wǎng)絡(luò) 閱讀:750 作者:ALDRIDGE1 欄目:移動(dòng)開(kāi)發(fā)

 

/* 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];

}

 
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI