为什么NSString不能获取用new分配的内存的所有权?

时间:2016-06-28 19:26:21

标签: objective-c nsstring dynamic-allocation calloc

Xcode 8(beta 1)中的静态分析器警告我,NSString initWithBytesNoCopy:length:encoding:freeWhenDone:无法获取new[]分配的内存的所有权。这是一个错误吗?如果没有,为什么会这样?

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

1 个答案:

答案 0 :(得分:4)

文档说明了freeWhenDone参数:

  

如果是,接收器不再使用free()释放内存   需要数据;如果不,它不会。

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