我在IOS键盘应用扩展程序中按下删除按钮时调用以下方法:
func delete()
{
dispatch_async(dispatch_get_main_queue(),
{
for _ in 1..<50
{
(self.textDocumentProxy as UIKeyInput).deleteBackward()
}
print("Deletion End")
})
}
但是,每次调用此方法时,键盘的内存使用量都会增加1-2mb,并且不会再降低。这很快就会导致崩溃。
我没有在此线程中分配或取消分配任何对象,所以我不确定为什么存在大量内存泄漏。
更新:
我将dispatch_get_main_queue()
更改为静态变量:
let mainqueue = dispatch_get_main_queue()
并使用mainqueue
代替dispatch_get_main_queue
,但这没有做任何事情。
更新2:
我添加了一个名为tempProxy
的变量,每次调用delete时都会创建该变量:
let tempProxy = (self.textDocumentProxy as UIKeyInput)
然后在dispatch_async
我使用了这个:
tempProxy.deleteBackward()
我这样做是因为我听说引用self
会导致内存滞留。
更新3:
我改变了:
(self.textDocumentProxy as UIKeyInput).deleteBackward()
到print()
声明。
内存使用量现在少了很多。但是,我很困惑为什么内存仍未被释放。
答案 0 :(得分:0)
原来我启用了NSZombie对象,每当我调用deleteBackward()