5

私は現在、少し前に始めたゲームに取り組んでいます。進捗状況は良好で、すべてがスムーズに実行されましたが、XCode Instruments を使用してコードのリークをチェックすることにしました。私は ARC を使用しており、新しいオブジェクトは他のオブジェクトが削除されたときにのみ追加されますが (ゲームの内部動作の一部)、合計メモリ サイズは実行中に増加し続けます。

私のゲームは完全に手続き的に生成され、アセットを必要としません。また、色のみでマッピングされたポリゴンをいくつか使用するだけなので、テクスチャはありません。実行するのに数MBしか必要としないと思いますが(最初から)、成長し続けています。

ここで、興味深いことに気付きました...データの大部分を使用しているのは、IOAccelResource というエントリです。加速度計/ジャイロスコープ/コンパスのデータを使用していないため、これは奇妙です。プロジェクトで参照されている CoreMotion フレームワークさえ持っていません。

データの 2 番目の主要な用途は、成長し続ける 4 つの malloc のコレクションです。比較的同じままのものがさらにいくつかあります。

ただし、これら 2 つのエントリは、プログラムによってリークとは見なされません。また、XCode にコードを分析するように指示しても、問題はありません。

他のエントリはすべて非常に小さく、ほぼ同じポイントで変動するか、同じままです。

面倒なエントリのスクリーンショットを次に示します。 エントリー

何かアドバイス?

4

1 に答える 1

10

「Overall Bytes」または「#Overall (elements)」が増加し続けることを参照している場合、これは総メモリ使用量を追跡するため (つまり、解放されたメモリは考慮されないため)、通常は問題になりません。

あなたが見なければならないのは、「Live Bytes」と「#Living (要素)」であり、それがあなたの期待に沿っていることを確認します。

また、「全体のバイト数」が増加し続けても、アプリがクラッシュしないこともわかります。一方、「Live Bytes」が増え続けると、アプリがクラッシュします。

Apple は、インストゥルメント プロファイルに含まれる情報が多すぎることに気付きました。そのため、xCode5 では、重要な情報を xCode に直接抽出しました。 xCodeの)。「ライブ バイト」のみを追跡するメモリ インジケータが表示されます。

また、WWDC 2013 のビデオにアクセスできる場合は、セッション 410: Fixing memory issues を確認してください。

お役に立てれば。

于 2013-10-02T04:20:22.670 に答える