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

前端之家收集整理的这篇文章主要介绍了objective-c – NSData *到std :: vector没有复制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我从一个API获得NSData *并且需要将其转换为另一个API的std :: vector,那么有没有办法安全地执行此操作而不复制NSData中的字节(假设一个非常大的NSData *)?

解决方法

没有想到的快速解决方案,没有.

如果您创建NSData对象(而不是由另一个API返回),您可能会考虑在确实需要避免副本时继承NSData和/或NSMutableData – 然后您可以直接访问存储(std :: vector).

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

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

当然,您需要确保在释放NSData对象之前不调整向量(或重新分配其后备存储).

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

猜你在找的C&C++相关文章