0

IOSキーボードアプリ拡張機能で削除ボタンが押されたときに呼び出される次のメソッドがあります:

func delete()
    {
        dispatch_async(dispatch_get_main_queue(),
            {
                for _ in 1..<50
                {
                    (self.textDocumentProxy as UIKeyInput).deleteBackward()
                }
                print("Deletion End")
        })
}

ただし、このメソッドが呼び出されるたびに、キーボードのメモリ使用量が 1 ~ 2 MB 増加し、元に戻りません。これにより、すぐにクラッシュが発生します。

このスレッドでオブジェクトの割り当てまたは割り当て解除を行っていないため、大規模なメモリ リークが発生する理由がわかりません。

アップデート:

dispatch_get_main_queue()静的変数に変更しました:

let mainqueue = dispatch_get_main_queue()

mainqueueの代わりに使用されdispatch_get_main_queueましたが、これは何もしませんでした。

更新 2:

tempProxydelete が呼び出されるたびに作成されるという変数を追加しました。

let tempProxy = (self.textDocumentProxy as UIKeyInput) 次に、dispatch_asyncこれを使用しました:

tempProxy.deleteBackward()

selfへの参照があるとメモリ保持が発生する可能性があると聞いたので、これを行いました。

更新 3:

私が変更され:

(self.textDocumentProxy as UIKeyInput).deleteBackward()

print()声明に。

メモリ使用量が大幅に減少しました。しかし、なぜメモリがまだ解放されていないのか、私は混乱していました。

4

1 に答える 1

0

NSZombie Objects を有効にしていたことがわかりました。これにより、呼び出すたびに永続的なメモリが増加しましたdeleteBackward()

于 2016-09-02T23:05:51.120 に答える