3

2つの部分からなるかなり簡単な質問。

  1. ビューがそのサブビューを保持し、ビューが他のビュー内にネストされているビュー階層をInterface Builderで作成する場合、ネストされたサブビューのIBOutletプロパティを保持するように設定する必要があるのはなぜですか?これらのサブビュープロパティに受け入れ可能なパラメータを割り当てませんか?

  2. 初期化時にそれ自体にいくつかのサブビューを追加するUIViewサブクラスがあります。特定のサブビューへの参照をキャプチャするには、@ property(nonatomic、assign)でそのニーズに対応できますよね?たとえば、メインUIViewはプレーヤースコアサブビューを追加し、後でそのプレーヤースコアと通信して更新したいと考えています。適切なビューはUIViewクラスによって自動的に保持されるため、その参照を割り当てるだけで済みます。

4

2 に答える 2

2

1)そうである必要はありません。 assign結構です。を使わなければならないと思った理由は何retainですか?

2) はい

ところで、あなたはARCを使っていますか?weakその場合は、代わりに使用assignしてください (理由は聞かないでください。スタック オーバーフローの隅々やインターネット全般でよく説明されています)。

于 2013-02-18T04:15:02.457 に答える
1

はい、確かにあなたの場合、サブビューはビューによって保持されるので、技術的には再度保持する必要はありません。しかし、それはちょっと壊れやすいです。将来、そのサブビューをスーパービューから削除するコードを追加した場合はどうなりますか?次に、それをゼロにすることを確認しない限り、ダングリングポインタがあります。

インスタンス変数を保持する必要がない場合を除いて(たとえば、デリゲートの場合)、インスタンス変数を保持するのが一般的な規則です。「ここに保持されているので、このインスタンス変数を保持する必要はありません。保持されていないので、このインスタンス変数を保持する必要があります」などと言う道をたどると、非常に無計画になります。メモリ管理。インスタンス変数を追加するたびに、それが他の何かによって保持されているかどうかを検討する必要があります。そして、それを使用するたびに、それを保持することにしたかどうかを覚えておく必要があります。まさに、メモリ管理ルールが回避するように設計されているのは、一種のメモリ管理の悪夢です。

そして、インスタンス変数を保持すると、それはどのような害を及ぼしますか?この場合、割り当てるときに追加の保持と解放が発生します。シンプルさと一貫性の利益のために、大したことではありません。

于 2013-02-18T19:51:15.617 に答える