Abh*_*ert 2 double objective-c nscoding ios
我如何使用-[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]];
}
Run Code Online (Sandbox Code Playgroud)
然而,这给了我不可接受的性能(用我的测试数据解码6秒,这比生产数据小得多).
如果我使用密钥,我可以使用-encodeDouble:forKey:,但我没有使用密钥(它们很慢),而且与Mac OS X不同-encodeDouble:,iOS上没有方法.
所以,我需要使用encodeBytes:length:和decodeBytesWithReturnedLength:,但我的C能力非常有限.我不确定如何在void *和之间进行转换double.
[coder encodeBytes:(void *)&latitude length:sizeof latitude];
NSUInteger length;
latitude = *(double *)[coder decodeBytesWithReturnedLength:&length];
Run Code Online (Sandbox Code Playgroud)
你也许可以通过NULL而不是&length.
| 归档时间: |
|
| 查看次数: |
1964 次 |
| 最近记录: |