我正在运行一个快速的NSTimer(每0.15秒),我发现大约每10秒钟内存增加约0.5mb。
这是我的代码:
dispatch_async(dispatch_get_main_queue(),{
//Prepare timer handshake
if let tmr = self.tmrHandshake {
tmr.invalidate()
self.tmrHandshake = nil
}
self.tmrHandshake = NSTimer.scheduledTimerWithTimeInterval(0.15, target: self, selector: #selector(self.sendLifeBeat), userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(self.tmrHandshake!, forMode: NSRunLoopCommonModes)
})
选择方法:
dynamic private func sendLifeBeat() {
let dataBytes = NSMutableData(data: lifebeatCmd.dataUsingEncoding(NSUTF8StringEncoding)!)
dataBytes.appendData(terminator.dataUsingEncoding(NSUTF8StringEncoding)!)
socketClient!.writeData(dataBytes, withTimeout: 5, tag: 1)
}
这些" dispatch_async"在后台线程上运行的方法内部调用。
您对如何解决此问题有任何建议吗? 感谢。
答案 0 :(得分:1)
在闭包中使自己成为弱或无主的引用 - 你有一个参考循环并且它没有解除分配
答案 1 :(得分:0)
使用Instruments配置应用程序,选择“Leaks”模板,选中“Discard events for freed memory”和“Enable NSZombie detection”。检查未解除分配的对象。
如果您正在使用XCode 8,您应该会在“运行时”下的“问题导航器”中看到内存泄漏。
当我发现泄漏时,这就是我要做的事情。尝试自己调试,我在你的例子中看不到任何错误的代码。