NSMutableData datawithBytesNoCopy:length:freeWhenDone: seems to make a copy of the buffer provided to it

不羁的心 提交于 2019-11-26 21:41:49

问题


According to Apple documentation, the class method

+datawithBytesNoCopy:length:freeWhenDone:

inherited from NSData

Creates and returns a data object that holds a given number of bytes from a given buffer.

But

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

prints

:(

The method seems to actually make a copy, where I expected it not to. Am I using this the wrong way? The equivalent NSData method works as expected. How would I create an NSMutableData object pointing to an already existing buffer without taking any ownership?


回答1:


I would guess that you just can't do what you want to do. After all, if you have an NSMutableData and append some more data to it, then the buffer would need to be reallocated, and no longer use the pointer you supplied.

Apple's Binary Data Programming Guide says that in the case of NSMutableData, the bytes are copied anyway.



来源:https://stackoverflow.com/questions/18770265/nsmutabledata-datawithbytesnocopylengthfreewhendone-seems-to-make-a-copy-of-t

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!