Xcode 8(beta 1)中的静态分析器警告我,NSString
initWithBytesNoCopy:length:encoding:freeWhenDone:
无法获取new[]
分配的内存的所有权。这是一个错误吗?如果没有,为什么会这样?
如果我将分配更改为使用calloc
而不是new[]
,则警告会消失。
答案 0 :(得分:4)
文档说明了freeWhenDone
参数:
如果是,接收器不再使用free()释放内存 需要数据;如果不,它不会。
完成后,freeWhenDone
字面上会调用free()
。要使用new[]
,完成后必须delete[]
。因此,警告消息是正确的。如果您不想复制字节,则需要将freeWhenDone
设置为NO
,并在不再需要时将delete[]
设置为字节。