我有一個C char *cArray
,它的長度,我需要將其轉換爲NSData的 我做它:的NSData造成泄漏
var data: NSData? = NSData(bytesNoCopy: cArray, length: Int(length))
,它的工作。問題是這導致了一些內存泄漏。我不知道爲什麼,但是我可以在分配工具中看到它是malloc 64字節,並且在函數完成時或將其設置爲null時不會釋放它。
此代碼被稱爲很多,所以我需要它是無泄漏的。我能做些什麼來防止泄漏?
編輯:這是代碼
func on_data_recv_fn(buf: UnsafeMutablePointer<CChar>, length: CInt, user_data: UnsafeMutablePointer<Void>) -> CInt {
guard buf != nil else {
NSLog("on_data_recv_fn buf is nil")
return -1
}
//var data: NSData? = NSData(bytesNoCopy: buf, length: Int(length), freeWhenDone: true)
var data: NSData? = NSData(bytesNoCopy: buf, length: Int(length))
let succeededWriting = Int(PacketTunnelProvider.sendPackets(data!))
data = nil
return CInt(succeededWriting)
}
根據存儲工具,這裏有一個泄漏。 sendPackets函數沒有保存數據,所以問題不存在。
完整的方法代碼請。 – Darko
查看編輯答案 – Roee84
如果觸發內存警告會發生什麼?內存是否被釋放? – Darko