我有以下方法,当删除按钮在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
,但这没有做任何事情。
我添加了一个名为tempProxy
的变量,该变量在每次调用delete时创建:
let tempProxy = (self.textDocumentProxy as UIKeyInput)
然后在dispatch_async
中,我使用了这个:
tempProxy.deleteBackward()
我这样做是因为我听说引用self
可能会导致内存保留。
:
(self.textDocumentProxy as UIKeyInput).deleteBackward()
to a print()
语句
内存使用现在少了很多。然而,我很困惑为什么内存仍然没有被释放
原来我启用了NSZombie对象,每次调用deleteBackward()