1

「ピザ」の写真を表示するアプリがあるとします。私のアプリのモデルが、さまざまなピザの 9 つの UIImage を含む単純な配列であるとしましょう。

@property (nonatomic) NSArray *myPizzas;

配列は、最初の View Controller で作成されFirstViewControllerます。このビュー コントローラーは、最初の 3 つのピザの画像も表示します。ユーザーが画面上のボタンをタップすると、このピザ配列がSecondViewController次の 3 つのピザを表示する 2 番目のビュー コントローラー ( ) に転送されます。最後に、ユーザーが画面上の最後のボタンをタップするとThirdViewController、最後の 3 つのピザを表示する最後のビュー コントローラー ( ) に配列が転送されます。

これがアプリのすべての処理であり、新しいビュー コントローラーがセグエされるたびに、ナビゲーション コントローラー スタックにプッシュされるとします。

私の質問は、各View Controllerstrongに配列への参照が必要ですか、それとも最初の1つだけにstrong参照があり、最後の2つのView Controllerにweak参照が必要ですか? そして最も重要なことは、なぜこれが当てはまるのですか?

4

3 に答える 3

4
@property (nonatomic, copy) NSArray * myPizzas;

あなたはその権利を読んだ-コピー。タイプがコピー可能でcopyある場合、特にタイプが不変である場合は、(ほぼ)常に正しい選択です。

タイプがを採用しないタイプである場合は、NSCopyingを選択しますstrong

参照を使用する利点や必要はありませんweak。弱参照は、プログラムのオブジェクトのセマンティクスと所有権を複雑にします。ここでweakを使用する必要はまったくありません。ポインタが弱いと、時間の経過とともにメンテナンスが増えるだけである可能性があります。したがって、強力な参照を使用することで、複雑さを回避できます。

于 2012-08-16T13:52:00.700 に答える
1

どちらでも構いません。少なくとも 1 つの強力な参照が必要であり、どちらの選択肢もそれを提供します。強い参照を使用すると、retain/release メッセージの数が増加しますが、このメカニズムは隠されているため、何も気付かないでしょう。

参照をまったく必要としない別の選択肢があります。myPizzas配列を持つモデルをシングルトンにし、必要に応じてコントローラーからアクセスします。これにより、チェーン内の次のコントローラーに渡す必要がなくなります。

于 2012-08-16T13:42:47.007 に答える
1

実際には、dasblinkenlight が正しいです。強い参照が 1 つある限り、配列は存続します。シングルトンも機能しますが、データを渡すためだけにシングルトンを使用しないようにしています。

ただし、最も一般的なパターンは、プロパティを強い参照として持つことです (ただし、特定の例の場合、NSArray はコピーする必要があります)。

カプセル化を保持するため、強力なリファレンスです。コントローラーは、他のオブジェクトが強い参照を維持する責任がある環境にあることに依存していません。

于 2012-08-16T13:52:03.463 に答える