gpt4 book ai didi

objective-c - 使用 NSCoding 编码/解码 double

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:42 25 4
gpt4 key购买 nike

如何使用 -[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]];
}

但是,这给了我 Not Acceptable 性能(用我的测试数据解码 6 秒,这比生产数据小得多)。

如果我使用 key ,我可以使用 -encodeDouble:forKey:,但我没有使用 key (它们很慢)并且与 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];

您可以传递 NULL 而不是 &length

关于objective-c - 使用 NSCoding 编码/解码 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com