コレクション アクセサーを省略できます。それらは必須ではありません。しかし、それらは物事をずっと簡単にします。
を含むそれらを持つ理由の 1 つcountOfEmployees
は効率です。employees
メソッドは配列オブジェクトのコピーを返す場合があります (特に Office のコピーは変更可能であるため、Office は他のオブジェクトが配列をその下から変更することを望んでいません)。カウントを知る必要があるか、特定のインデックスで 1 つのオブジェクトにアクセスするだけでよく、コピーは必要ありません。
もう 1 つの理由は、送信者がプロパティを変更したい場合です。
valueForKey:
employees
通常、不変のコピーを返します。
- その配列を変更すると、プロパティを介してオリジナルではなくコピーが変更されるため、変更可能なコピーを返すことは役に立ちません。
- 元の配列を返すと、送信者はその変更について KVO 通知を発生させることができないため、プロパティを監視するものはそれらの変更を認識しません。これは、UI に表示される値が古くなる (更新されない) ことを意味します。
mutableArrayValueForKey:
employees
元のオブジェクトにミューテーション メッセージ (または、他に何もない場合はsetEmployees:
メッセージ) を送信する偽の配列を返します。アクセサー メッセージによって KVO 通知が発生するため、プロパティを監視するものはすべてこれらの変更に従っているため、UI は最新の状態に保たれます。
もちろん、アクセサ メッセージを自分で送信することもできます。mutableArrayValueForKey:
主に、コンパイル時に不明なプロパティに変更を加えたい場合に使用します。NSArrayController は、おそらく、このメソッドの 1 つのユーザーです。通常のアプリケーションで使用する必要はほとんどなくmutableArrayValueForKey:
、アクセサ メッセージを自分で送信する方が読みやすいと思います。
独自の配列を変更する場合、これはすべて Office にも当てはまります。配列オブジェクトと直接対話することもできますが、KVO 通知は発生しないため、プロパティの値が変更されたことは他にはわかりません。変更ごとに KVO 通知を自分で投稿することもできますが、これは手間がかかり、忘れがちです。コレクション アクセサーとmutableArrayValueForKey:
は、これらの問題に対する 2 つの解決策です。各アクセスは、KVO 通知を引き起こす 1 行のコードです。