0
Xcode 8(beta 1)中的静态分析器警告我NSString
的initWithBytesNoCopy:length:encoding:freeWhenDone:
无法取得由new[]
分配的内存的所有权。这是一个错误吗?如果没有,为什么会出现这种情况?为什么NSString不能获取新分配的内存的所有权?
如果我将配置更改为使用calloc
而不是new[]
,警告消失。
Xcode 8(beta 1)中的静态分析器警告我NSString
的initWithBytesNoCopy:length:encoding:freeWhenDone:
无法取得由new[]
分配的内存的所有权。这是一个错误吗?如果没有,为什么会出现这种情况?为什么NSString不能获取新分配的内存的所有权?
如果我将配置更改为使用calloc
而不是new[]
,警告消失。
文档说此有关freeWhenDone
参数:
如果是,则接收机释放与存储器免费()当不再需要 数据它;如果不是,它不会。
因此freeWhenDone
字面上完成后调用free()
。要使用new[]
,完成后必须要delete[]
。因此,警告信息是正确的。如果你不想复制字节,那么你需要设置freeWhenDone
到NO
和delete[]
不再需要的字节。
我猜NSString和C++混合不好。 – Avi
@ user3386109将其作为答案发布。 –
@ AminNegm-Awad好的,我将评论转换为答案。 – user3386109