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

时间:2016-09-02 20:13:48

标签: ios swift memory-leaks grand-central-dispatch textdocumentproxy

我在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()声明。

内存使用量现在少了很多。但是,我很困惑为什么内存仍未被释放。

1 个答案:

答案 0 :(得分:0)

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

时都会留下永久性内存增加