Objective c 为什么NSString不能拥有分配给new的内存?
Xcode 8(beta 1)中的静态分析器警告我,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
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,我把评论转换成答案。