0

アプリのメモリテストを試みています。

オーガナイザー- 「放棄したメモリの回復」というタイトルのドキュメントの記事をフォローしましたが、結果によってテストしたページが良いか悪いか、またはその中間かどうかはわかりません。

(私のテストには、2ページに移動し、1ページに戻って、[マークヒープ]を押します。適切な測定のために25回繰り返します。)

添付されているのは、割り当てテストのスクリーンショットです。ほとんどの#Persistent値は0です。ただし、いくつかの異常があります。これらは典型的なものですか?

(最後のヒープショット26は、記録を停止し、トレースの最後で[マークヒープ]を押した後に取得されました-ドキュメントで提案されています。)

アドバイスをいただければ幸いです。ありがとう。

ここに画像の説明を入力してください

4

1 に答える 1

2

ARCを使用していると思います。ARCを使用している場合は、ヒープを気にする必要はなく、すべてを処理します。

ARCを使用する際に留意すべきAppleのドキュメントからの9つの簡単なポイントは次のとおりです。

ARCは、他のコンパイラモードを使用する場合には存在しないいくつかの新しいルールを課します。ルールは、完全に信頼できるメモリ管理モデルを提供することを目的としています。場合によっては、単にベストプラクティスを適用することもあれば、コードを単純化することもあれば、メモリ管理を処理する必要がないことの当然の結果である場合もあります。これらのルールに違反すると、実行時に明らかになる可能性のある微妙なバグではなく、コンパイル時のエラーがすぐに発生します。

  1. 明示的にdeallocを呼び出したり、retain、release、retainCount、またはautoreleaseを実装または呼び出したりすることはできません。禁止事項は、@ selector(retain)、@ selector(release)などの使用にまで及びます。

  2. インスタンス変数の解放以外のリソースを管理する必要がある場合は、deallocメソッドを実装できます。インスタンス変数を解放する必要はありませんが(実際にはできません)、ARCを使用してコンパイルされていないシステムクラスやその他のコードで[systemClassInstance setDelegate:nil]を呼び出す必要がある場合があります。ARCのカスタムdeallocメソッドでは、[superdealloc]を呼び出す必要はありません(実際にはコンパイラエラーが発生します)。スーパーへのチェーンは、コンパイラによって自動化および適用されます。

  3. CFRetain、CFRelease、およびその他の関連機能をCoreFoundationスタイルで引き続き使用できます

  4. NSAllocateObjectまたはNSDeallocateObjectは使用できません。

  5. allocを使用してオブジェクトを作成します。ランタイムがオブジェクトの割り当て解除を処理します。

  6. C構造体ではオブジェクトポインタを使用できません。構造体を使用する代わりに、Objective-Cクラスを作成してデータを管理できます。idとvoid*の間にカジュアルなキャストはありません。

  7. オブジェクトの存続期間についてコンパイラーに通知する特別なキャストを使用する必要があります。関数の引数として渡すObjective-CオブジェクトとCoreFoundationタイプの間でキャストするには、これを行う必要があります。詳細については、「フリーダイヤルブリッジの管理」を参照してください。</ p>

  8. NSAutoreleasePoolオブジェクトは使用できません。ARCは代わりに@autoreleasepoolブロックを提供します。これらには、NSAutoreleasePoolよりも効率的であるという利点があります。

  9. メモリゾーンは使用できません。NSZoneを使用する必要はもうありません。NSZoneはとにかく最新のObjective-Cランタイムでは無視されます。

于 2012-08-15T11:19:35.693 に答える