メモリ管理について


アプリケーションメモリ管理は、プログラムの実行中にメモリを割り当て、使用してメモリを解放し、メモリを使用し終われば解放する過程です。よく書かれたプログラムは、できるだけ少ないメモリを使用します。Objective-C では、限られたメモリリソースの所有権を多くのデータとコードに分散する方法としても見られます。このガイドの作業が終了したら、オブジェクトの寿命を明示的に管理し、不要になったらオブジェクトを解放することによって、アプリケーションのメモリを管理するために必要な知識を身に付けることができます。


メモリ管理は通常、個々のオブジェクトのレベルで考慮されますが、目標は実際に オブジェクトグラフ を管理することです。実際に必要なものよりも多くのオブジェクトがメモリにないことを確認したいとします。


一目見て


Objective-C は、アプリケーションメモリ管理用に 2 つの方法を提供します。


  1. このガイドで説明されている方法 ("マニュアルで保持解除" または MRR) では、所有するオブジェクトを追跡して明示的にメモリを管理します。これは、Foundation クラスの NSObject が実行時環境とともに提供する参照カウントと呼ばれるモデルを使用して実装されます。
  2. Automatic Reference Counting (ARC) では、システムは MRR と同じ参照計数システムを使用しますが、コンパイル時に適切なメモリ管理メソッド呼び出しを挿入します。新しいプロジェクトには ARC を使用することを強くお勧めします。ARC を使用する場合、通常、この文書で説明されている基本的な実装を理解する必要はありませんが、状況によっては役立つ場合もあります。ARC の詳細については、ARC リリース移行へのノート を参照してください。

メモリー関連の問題を防ぐ良い方法


間違ったメモリ管理の結果、主な 2 つの種類の問題が発生します。



しかし、実際の目標ではなく実装の詳細に関してメモリ管理を検討する傾向があるため、参照カウントの観点からメモリ管理について考えることはしばしば非生産的です。代わりに、オブジェクトの所有権と オブジェクトグラフ の観点からメモリ管理を考える必要があります。


メソッドが返すオブジェクトの所有者を示すために、Cocoa は簡単な命名規則を使用します。


メモリ管理ポリシー を参照の事。


基本方針は簡単ですが、メモリの管理を容易にし、プログラムの信頼性と堅牢性を維持しつつ、リソース要件を最小限に抑えるための実践的な手順があります。


実践的なメモリ管理 を参照の事。


自動解放プールブロックは、オブジェクトに "遅延" release メッセージを送信できるメカニズムを提供します。これは、オブジェクトの所有権を放棄したいが、すぐに解放される可能性を避けたい場合 (メソッドからオブジェクトを返すときなど) に便利です。独自の自動解放プールブロックを使用する場合があります。


分析ツールを使用してメモリの問題をデバッグ


コンパイル時にコードの問題を特定するには、Xcode に組み込まれている Clang Static Analyzer を使用します。


それにもかかわらず、メモリ管理の問題が発生した場合は、問題を特定して診断するために使用できる他のツールとテクニックがあります。



次の章



目次
Xcode 9 の新機能

  • メモリ管理について
  • 一目見て
    メモリー関連の問題を防ぐ良い方法
    分析ツールを使用してメモリの問題をデバッグ
  • メモリ管理ポリシー
  • 基本的なメモリ管理規則
  • オブジェクトの所有権を放棄するため dealloc の実装
    Core Foundation は、類似するが違う規則を使用
  • 実践的なメモリ管理
  • アクセッサメソッドを使用してメモリ管理を容易に
  • 弱い参照を使用して循環保持を避ける
    使用中のオブジェクトの割り当て解除を避ける
    dealloc を使って希少リソースを管理しない
    コレクションに含まれるオブジェクトを所有
    保持カウントを使用して所有権ポリシーの実装
  • 自動解放プールブロックの使用
  • 自動開放プールブロックについて
    ローカルの自動開放プールブロックを使用しピークメモリ使用量を削減
    自動解放プールブロックとスレッド
  • 文書改訂履歴












  • トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)