どこに強を使い、どこに弱を使うか少し混乱しています。ios で参照カウントを監視するツールはありますか?
3 に答える
強い参照は、クラスがオブジェクトの所有権を保持し、クラスがそれを必要としなくなるまでオブジェクトの割り当てが解除されないようにする場合に使用されます。これは通常、安価に再現できないオブジェクト (サーバーからダウンロードしたデータなど) や、クラスの操作中に重要なものに使用されます。
オブジェクトへの参照が必要な場合は、弱参照を使用します。所有者が割り当てを解除すると、オブジェクトはなくなります。これは通常、割り当てが解除されていないオブジェクトを気にせずに循環参照に使用されます。
他のコメントに追加するだけですが、強力な参照サイクル(以前は保持サイクルと呼ばれていました)を理解することは重要ですが、親オブジェクトへのポインターを子に渡さない限り、それらは比較的まれです。そのようなことをしている場合は、いくつかのAppleドキュメント、特に基本的なプログラミングスキルの習得、高度なメモリ管理、およびARCへの移行で概説されている強力な参照サイクル(別名保持サイクル)の説明を理解する必要があります。実際問題として、保持サイクルの一般的な例は、親コントローラーへのポインターを子コントローラーに渡す場合です。これらの場合、一般的にこれらのポインタを作成する必要がありますweak
、それ以外の場合strong
は、一般的にかなり安全です。
弱参照の他の一般的な状況は、NIBまたはストーリーボードのコントロールのIBOutletsです。これも一般的にはweak
です。(Interface Builderからヘッダーファイルにドラッグすることでアウトレットを作成すると、自動的に作成さweak
れます。)とにかく、リソースプログラミングガイドから引用します。
ファイルの所有者からnibファイル(またはiOSではストーリーボードシーン)のトップレベルオブジェクトまでのアウトレットを除いて、アウトレットは一般的に弱くする必要があります。したがって、作成するアウトレットは、通常、デフォルトで弱くなります。理由は次のとおりです。
たとえば、ビューコントローラのビューのサブビューやウィンドウコントローラのウィンドウに作成するアウトレットは、所有権を意味しないオブジェクト間の任意の参照です。
強力なアウトレットは、フレームワーククラス(たとえば、UIViewControllerのビューアウトレット、またはNSWindowControllerのウィンドウアウトレット)によって頻繁に指定されます。
一般に、保持サイクルを回避する場合を除いて、weak を使用する必要はありません。つまり、互いに強い参照を持つ 2 つのオブジェクトがない限り、問題ありません。