gpt4 book ai didi

objective-c - NSData* 到 std::vector 没有复制

转载 作者:太空狗 更新时间:2023-10-30 03:37:32 24 4
gpt4 key购买 nike

如果我有一个来自一个 API 的 NSData* 并且需要将其转换为另一个 API 的 std::vector,有没有什么方法可以安全地执行此操作而无需复制 NSData 中的字节(假设一个非常大的 NSData*) ?

最佳答案

没有想到快速解决方案,没有。

如果你创建了 NSData 对象(而不是它被另一个 API 返回),当你真的需要避免复制——然后您可以直接访问存储 (std::vector)。

在某些情况下,您也可以通过使用“您的”分配创建数据来偷偷摸摸地绕过它:

NSData * data([[NSData alloc]
initWithBytesNoCopy:vector.data()
length:vector.size()
freeWhenDone:false]);

当然,您需要确保在释放 NSData 对象之前未调整矢量大小(或其后备存储重新分配)。

有时您还需要考虑更改参数类型,使其不是std::vector。具有 NSData 成员和类似向量的接口(interface)、迭代器或 begin+end 的小容器在容纳其他集合类型时可能就足够了。

关于objective-c - NSData* 到 std::vector<unsigned char> 没有复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16781320/

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