Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么NSString不能拥有分配给new的内存?_Objective C_Nsstring_Dynamic Allocation_Calloc - Fatal编程技术网

Objective c 为什么NSString不能拥有分配给new的内存?

Objective c 为什么NSString不能拥有分配给new的内存?,objective-c,nsstring,dynamic-allocation,calloc,Objective C,Nsstring,Dynamic Allocation,Calloc,Xcode 8(beta 1)中的静态分析器警告我,NSString的initWithBytesNoCopy:length:encoding:freewwhendone:无法拥有new[]分配的内存。这是一个错误吗?若否,原因为何 如果我将分配更改为使用calloc而不是new[],警告就会消失。文档中提到了freewwhendone参数: 如果是,则当不再使用free()时,接收器将释放内存 需要数据;如果没有,就不会 所以freewwhendone在完成时会直接调用free()。要使用new

Xcode 8(beta 1)中的静态分析器警告我,
NSString
initWithBytesNoCopy:length:encoding:freewwhendone:
无法拥有
new[]
分配的内存。这是一个错误吗?若否,原因为何


如果我将分配更改为使用
calloc
而不是
new[]
,警告就会消失。

文档中提到了
freewwhendone
参数:

如果是,则当不再使用free()时,接收器将释放内存 需要数据;如果没有,就不会


所以
freewwhendone
在完成时会直接调用
free()。要使用
new[]
,完成后必须
delete[]
。因此,警告消息是正确的。如果不想复制字节,则需要将
freewwhendone
设置为
NO
,并在不再需要时
删除[]
字节

文档中提到了
freewwhendone
参数:

如果是,则当不再使用free()时,接收器将释放内存 需要数据;如果没有,就不会


所以
freewwhendone
在完成时会直接调用
free()。要使用
new[]
,完成后必须
delete[]
。因此,警告消息是正确的。如果不想复制字节,则需要将
freewwhendone
设置为
NO
,并在不再需要时
删除[]
字节

NSString和C++没有很好的混合。@ USER 338 6109把这个作为答案。@ AximnMang-AWAD OK,我把评论转换成答案。我猜NSString和C++不太好。@ USER 338 6109把这个作为答案。@ AsiNangm AWAD OK,我把评论转换成答案。