0

私は解釈するのに十分な経験がないというメモリ警告を受け取る iPhone ゲームに取り組んでいます。私はいくつかの iTunesU チュートリアルを見てきましたが、私はまだこれが得意ではありません..

ゲームの実行中にさまざまなメモリ リークが発生したため、Instruments で表示されるスタック トレースを正しく解釈する方法を理解したいと思いました。

ObjectAllocation インストルメント出力のスクリーンショットを添付します楽器の出力 。フィルターをズームしても、 ObjectSummary のデータをフィルター処理できませんこのスクリーンショットを見る

1のメモリ使用量のピークは、GameScene が初期化され、すべてのデータが読み込まれ (ParallaxBackground、CCSpriteBatchNode)、スプライト フレームとブレット フレームが作成されたときに発生します (spriteFrame の CCArray 内)。

大きな青色のピークはロード時だけですが、アプリがフリーズしてしばらくするとクラッシュし、グラフからメモリ使用量 (青色のバー) が低下していることがわかります..だから私はそれを黙っていません. また、リーク計測器を使用しようとすると、アプリがクラッシュします..

経験豊富な人にとっては非常にばかげた質問であることはわかっていますが、このツールセットを使い始めるために追加のサポートが必要です.

メモリの問題は、スプライト キャッシュ クラスに割り当てるスプライトが原因だと思いますが、これについてはよくわからないため、Instruments を使用してこれを調査したかったのですが、メモリ警告の原因となっているオブジェクトを確認する方法を見つけることができません。スタックトレースにアクセスする方法..

PS: 私は iPod 第 4 世代で実行しており、Cocos2D をライブラリとして使用しています。

編集: Live Bytes が 1.01 MB しかない場合にアプリがクラッシュする理由と、メモリ警告が引き続き表示される理由もわかりません (黒いフラグを参照)。null 変数を参照するポインターが原因なのか、それとも過剰なメモリ割り当てが原因なのか? 1.01 MB は私にはあまりないようです..

編集 2: マリオンのアドバイスに従って、アクティビティ モニターを使用したところ、実際のメモリ使用量が 55.39 MB であることがわかりました。「ライブバイト」という言葉を誤解していました。私はこれをさらに掘り下げようとし、他の人が貢献できるように、今のところ質問を受け入れないままにします. 1、2 日以内に他の回答がない場合は、現在の回答を承認済みとしてマークします。ありがとう!

アクティビティモニター

どうもありがとう!

4

1 に答える 1

1

リークを見つけたい場合は、Allocations の代わりに Leaks インストゥルメントを使用してください。現在のメモリ使用量を確認するには、ActivityMonitor を使用します。

cocos2d でメモリに問題が発生する場合は、キャッシュを消去してみてください。CCTextureCachecocos2dではCCSpriteFrameCache、、、をパージできますCCAnimationCache。未使用のテクスチャとフレームをリリースします。

不要なテクスチャがすべてメモリから削除されたかどうかを確認したい場合はCCTextureCache、たとえば、クラスにブレークポイントを設定して呼び出し、sharedTextureCachetextures_ ディクショナリの内容をスローすることができます。または、このクラスに何らかのメソッドを追加して、キャッシュの現在の状態をダンプできるようにします。

于 2012-06-12T17:00:03.840 に答える