2

ファイルの所有者からのトップレベルのオブジェクトでない限り、IBOutlet に weak を使用する必要があると述べているいくつかの Q&A とドキュメントを読みました。

しかし、まだ強力/保持を使用している場合、大きな欠点はありますか、それともサブビューが addSubview: で既に保持されているため、単に冗長ですか?

注: ここでweak / strongの定義をコピーしないでください。私はそれを必要としません.IBOutletにstrongを使用すると問題が発生する可能性がある実際のケースを確認したいと思います. ありがとう。

4

2 に答える 2

1

MRC で を使用するretainと、自分でメモリを解放する必要があります。

ARC を使用strongしていて、システムがアプリからメモリを要求した場合 (= ビューがアンロードされる場合)、自分でメモリを解放する必要があります (コントローラはまだアクティブであるため、dealloc呼び出されないことに注意してください) 。

ほとんどのアウトレットでは、メモリの解放を気にする必要がないため、 weak/が適切です。assign

例外:

  1. IBOutletCollection強く/保持する必要があります。コレクション ( NSArray) は、ビュー階層によって保持されません。

  2. ビューを動的に追加/削除します。ビュー階層からビューを削除して後で再度使用する場合、ビューをどこかに保持する必要があります。そうしないと、削除時に割り当てが解除されます。ただし、削除時にいつでもコードに保持できることに注意してください。

于 2013-07-17T09:46:37.730 に答える
0

誰かがより良い回答を提供するまで、これを「承認済み」としてマークします。

どうやら唯一の欠点は、ビューがメモリ警告を受け取ると、ビューがアンロードされ、最適にはすべてのサブビューが解放されることです。ただし、strong を使用してもコントローラーはそれらを保持するため、viewDidUnload で手動でそれらを nil する必要があります。

iOS 6 から、メモリ警告を受け取ってもビューがアンロードされないため、これは重要ではなくなります。実用的な観点からは、アプリケーションでビューを手動でアンロードする必要がない限り、IBOutlet に弱い使用と強い使用の間に大きな違いはありません。

于 2013-07-17T09:25:45.063 に答える