iphone / Objective C / 如何编码 double[] 以进行存档

发布于 2024-08-27 08:24:35 字数 50 浏览 10 评论 0原文

我使用 double[] 而不是 NSArray。有人知道如何对其进行编码以进行存档吗

I am using double[] instead of NSArray. Would anyone know how to encode it for archiving

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

快乐很简单 2024-09-03 08:24:35

我想到了两个选择:

  1. 将其转换为 NSNumber 对象的 NSArray
  2. 将其插入 NSValueNSData 对象。

Two options come to mind:

  1. Convert it into an NSArray of NSNumber objects.
  2. Shoehorn it into an NSValue or NSData object.
红衣飘飘貌似仙 2024-09-03 08:24:35

如果您不在平台之间传输编码数据(可能会遇到字节顺序和数据大小问题),则可以使用

- (void)encodeBytes:(const uint8_t*)bytesp length:(NSUInteger)lenv forKey:(NSString*)key;

直接存储字节,然后

- (const uint8_t*)decodeBytesForKey:(NSString*)key returnedLength:(NSUInteger*)lengthp;

对其进行解码。正如 NSCoder 头文件指出的那样,decodeBytesForKey:returnedLength: 方法返回不可变字节,因此您需要将返回的数组复制到 malloced double 数组中。由于返回的数组是 const,我假设解码器拥有该数组,并将在解码器释放时释放它。

这不像将数组放入 NSData 对象并存档那么方便,但它确实避免了创建临时对象的开销。

If you're not transferring the encoded data between platforms, where you might run into problems with endianness and data size, you can use

- (void)encodeBytes:(const uint8_t*)bytesp length:(NSUInteger)lenv forKey:(NSString*)key;

to store the bytes directly, and then

- (const uint8_t*)decodeBytesForKey:(NSString*)key returnedLength:(NSUInteger*)lengthp;

to decode them. As the NSCoder header file points out, the decodeBytesForKey:returnedLength: method returns immutable bytes, so you'll want to copy the returned array into your malloced double array. Since the returned array is const, I'm assuming the decoder owns that array and will free it when the decoder is dealloced.

This isn't as convenient as just putting the array into an NSData object and archiving that, but it does avoid the overhead of creating a temporary object.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文