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