每次分配而不释放的内存调用非常简单的方法



我有以下方法,当删除按钮在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()

to a print()语句

内存使用现在少了很多。然而,我很困惑为什么内存仍然没有被释放

原来我启用了NSZombie对象,每次调用deleteBackward()

时都会增加永久内存。

最新更新