5

400 ~ 500 個のファイルをダウンロードして解凍XMLし、解析するという大規模な同期プロセスがあります。このデータを使用して、RestKit API. 自動解放プールを使用せず、最後にコア データのみを保存しようとしたため、最初は 450 MB 以上のライブ バイトでメモリ警告が表示されました。

私はそれを修正し、コアデータに頻繁に保存し、 @autoreleasepoolブロックを使用しました。インストルメントを使用してアプリを実行すると、ライブ バイトが 20 MB ~ 30 MB しかなく、常にメモリが解放され、サイズが大きくならないことがわかります。プロセスは機能します。しかし、インストゥルメントなしでアプリを起動すると、ファイルを表示した後にMemory Warning. 後でアプリがクラッシュします。

instrumentsツールを使用する場合と使用しない場合のアプリの実行の違いは何ですか? なぜ異なる結果に終わるのですか?

4

1 に答える 1

4

このページにたどり着いてとてもうれしいので、この回答を追加します。

@borrrden提案したことは、部分的に真実です。プロファイリング時に使用するビルド設定を構成できます。これを構成するには、Xcode に移動して [スキームの編集] ダイアログを開き、左側のメニューでProfile XXX.appを選択します。ビルド構成 (デバッグまたはリリース) を選択できることがわかります。

ここに画像の説明を入力

@hooleyhoopがコメントしたことは、解決策を見つける上でより重要でしたProfile Build Configuration が Debug に設定されていても、Profiling とデフォルトの Xcode 内からの Run には違いがあります。実行セクションで診断を指定できます。そこに、Memory Managementの下にEnable Zombie Objectsというオプションがあります。このオプションがオフになっていることを確認してください。

ここに画像の説明を入力

これらの診断実行設定は、プロファイリング中には使用されません。それが、あなたが経験している行動の説明です。プロファイル セクションにも [診断] タブはありません。


その結果、ゾンビ オブジェクトを有効にしてメイン メニューで何もせずに 5 分間放置すると、私のゲーム (Gump) がクラッシュしました。Zombie Objectsを無効にすると、私のゲームは無限の時間、私が知っている限り実行されます。45 分後、まだメモリの警告はありません。

于 2013-08-14T23:32:01.247 に答える