【发布时间】:2013-09-12 17:01:36
【问题描述】:
根据苹果文档,类方法
+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 对象指向一个已经存在的缓冲区而不获取任何所有权?
【问题讨论】:
-
我也不明白...我也希望 :D -- 闻起来可能像个虫子
-
我过去曾将此报告为一个错误,Apple 表示这是故意的。非常烦人。根据他们的说法,“这符合预期 - 避免此副本会导致太多情况,其中键入为 NSData 的内容预期具有来自 -bytes 的不可更改内容”