4

重複の可能性:
IBOutlets は ARC の下で強いか弱いか?

私はARCについて簡単に読んで、大丈夫だと思いました。すべてが強く、デリゲートは弱いです。

現在、Interface Builder でビューを作成して IBOutlets を作成しており、Xcode のデフォルト設定はweak に設定されています。

この提案には理由があるようですが、ほとんどの IBOutlets が弱いプロパティを必要とする理由はありますか?

これらのビュー (IBOutlets) は、そのスーパービューに関連付けられているため、既に保持されているためですか? IBOutlet ビューをめったに置き換えませんか?

強く設定しても問題ないと思いますが、何か問題はありますか?

4

2 に答える 2

5

IBOutlet参照を弱くする必要がある理由については、 『リソースプログラミングガイド:Nibファイル』を参照してください。ガイドから引用します:

ファイルの所有者からnibファイル(またはiOSではストーリーボードシーン)のトップレベルオブジェクトまでのアウトレットを除いて、アウトレットは一般的に弱くする必要があります。したがって、作成するアウトレットは通常、弱いはずです。理由は次のとおりです。

  • たとえば、ビューコントローラのビューまたはウィンドウコントローラのウィンドウのサブビューに対して作成するアウトレットは、所有権を意味しないオブジェクト間の任意の参照です。
  • 強力なアウトレットは、フレームワーククラスによって頻繁に指定されます(たとえば、UIViewControllerのビューアウトレット、またはNSWindowControllerのウィンドウアウトレット)。

私自身の2セントは、strong所有している場合は物を作ります。所有者がいなくなって保持する必要がある場合に備えて、強力な参照が必要です。どちらもここでは当てはまりません。だから、「なんで作れないの?」と聞くのではなく、「なんで作りstrongたいの?」と聞くのstrongです。そうする正当な理由がない場合は、InterfaceBuilderにそれを実行させて作成しweakます。

于 2012-08-25T04:59:25.083 に答える
0

それはただの好みです。弱いまたは割り当てる理由は、スーパービュー、コントローラーなどは、そのグラフ内のオブジェクトの存続期間中に強い参照を保持することです。

個人的には、私は古い学校であり、このシナリオでも強力な参照を好みます。強い参照を使用すると、オブジェクトのサブグラフのコンポーネントを明示的に破棄する必要がある場合があります (たとえば、破棄するときにすべての循環依存関係を「破棄」する必要があります)。私は一貫性を好むため、非常に例外的な状況でのみweakを使用します。何か問題が発生した場合や、プログラムを読んでいるときに、関係する変数が少なくなります。

于 2012-08-25T04:38:16.847 に答える