每次调用非常简单的方法分配内存而不释放内存
Memory being allocated and not released each time call very simple method
我有以下方法,当在 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()
语句。
内存使用量现在少了很多。但是,我很困惑为什么内存仍然没有被释放。
原来我启用了 NSZombie 对象,每次调用 deleteBackward()
时都会增加永久内存
我有以下方法,当在 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()
语句。
内存使用量现在少了很多。但是,我很困惑为什么内存仍然没有被释放。
原来我启用了 NSZombie 对象,每次调用 deleteBackward()