Cocoa NSMutableData datawithBytesNoCopy:length:freeWhenDone:似乎在复制提供给它的缓冲区

Cocoa NSMutableData datawithBytesNoCopy:length:freeWhenDone:似乎在复制提供给它的缓冲区,cocoa,nsdata,Cocoa,Nsdata,根据Apple文档,类方法 +带有BytesNocopy的数据:长度:freeWhenDone: 从NSData继承 创建并返回一个数据对象,该对象保存给定缓冲区中给定数量的字节 但是 印刷品 :( 这个方法似乎真的复制了一个副本,这是我所期望的。 我用错了吗? 等效的NSData方法按预期工作。 我如何创建一个指向已经存在的缓冲区的NSMutableData对象而不获取任何所有权?我猜您就是做不到想要做的事情。毕竟,如果您有一个NSMutableData并向其追加了一些数据,那么需要重新分配

根据Apple文档,类方法

+带有BytesNocopy的数据:长度:freeWhenDone:

从NSData继承

创建并返回一个数据对象,该对象保存给定缓冲区中给定数量的字节

但是

印刷品

:(
这个方法似乎真的复制了一个副本,这是我所期望的。 我用错了吗? 等效的NSData方法按预期工作。
我如何创建一个指向已经存在的缓冲区的NSMutableData对象而不获取任何所有权?

我猜您就是做不到想要做的事情。毕竟,如果您有一个
NSMutableData
并向其追加了一些数据,那么需要重新分配缓冲区,不再使用您提供的指针


苹果公司说,在
NSMutableData
的情况下,字节还是被复制的。

他得到原始字节。。。它不能神奇地在C中实现某些东西。。无论如何,这不是答案。我认为这个答案很有道理。NSMutableData有一个
appendData:
方法。对于init调用中给定的缓冲区,该如何工作它与NSData一样工作,但NSMutableData可能是一个可变副本。实际上,
appendData:
的捕获是有意义的。我也不明白。。。我还以为:d——闻起来像个bug,我以前可能把它当作bug报告过,苹果说这是故意的。非常讨厌。根据他们的说法,“这与预期的一样,避免此副本将导致太多的场景,其中键入为NSData的内容预期来自-bytes的不可更改内容”
:(