4

根据Apple文档,类方法

+datawithBytesNoCopy:length:freeWhenDone:

继承自 NSData

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

NSUInteger len = 1024;
char *buffer = malloc(len);
NSMutableData *data = [NSMutableData dataWithBytesNoCopy:buffer length:len freeWhenDone:YES];
char *dataBytes = data.mutableBytes;
NSLog(@"%@", dataBytes == buffer ? @":D" : @":(");

印刷

:(

该方法似乎实际上制作了一个副本,我预计它不会。我用错了吗?等效的 NSData 方法按预期工作。我如何创建一个 NSMutableData 对象指向一个已经存在的缓冲区而不获取任何所有权?

4

1 回答 1

4

我猜你只是不能做你想做的事。毕竟,如果您有一个NSMutableData并向其附加更多数据,则需要重新分配缓冲区,并且不再使用您提供的指针。

Apple 的二进制数据编程指南说,在 的情况下NSMutableData,无论如何都会复制字节。

于 2013-09-12T21:26:19.967 回答