我怎样才能使用-[NSCoder encodeBytes:length:]
和-[NSCoder decodeBytesWithReturnedLength:]
双打?
我有一个符合NSCoding
两个double
属性的对象,目前正在使用NSNumber
对值进行编码/解码:
- (id)initWithCoder:(NSCoder *)decoder
{
if (!(self = [super init]))
return nil;
latitude = [(NSNumber *)[decoder decodeObject] doubleValue];
longitude = [(NSNumber *)[decoder decodeObject] doubleValue];
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeObject:[NSNumber numberWithDouble:latitude]];
[coder encodeObject:[NSNumber numberWithDouble:longitude]];
}
但是,这给了我无法接受的性能(用我的测试数据解码需要 6 秒,这比生产数据小得多)。
如果我使用键,我可以使用-encodeDouble:forKey:
,但我没有使用键(它们很慢),并且与 Mac OS X 不同-encodeDouble:
,iOS 上没有方法。
所以,我需要使用encodeBytes:length:
and decodeBytesWithReturnedLength:
,但我的 C 能力非常有限。我不确定如何在void *
和之间转换double
。