0

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

内存使用量现在少了很多。但是,我对为什么仍然没有释放内存感到困惑。

4

1 回答 1

0

原来我启用了 NSZombie 对象,每次调用时都会增加永久内存deleteBackward()

于 2016-09-02T23:05:51.120 回答