1

可変で順序付けされていない対多の関係が必要だとします。内部最適化の理由から、これはNSMutableDictionaryではなくに格納することをお勧めしますNSMutableSet。しかし、その実装の詳細は非公開にしたいと思います。

また、KVO 準拠のアクセサーをいくつか提供したいと思います。

- (NSSet*)things;
- (NSUInteger)countOfThings;
- (void)addThings:(NSSet*)someThings;
- (void)removeThings:(NSSet*)someThings;

さて、ディクショナリにもアクセサ (もちろん、私の実装ファイルではプライベートなもの) を提供することは便利であり、それほど害はありません。

@interface MYClassWithThings ()
@property (retain) NSMutableDictionary* keyedThings;
@end

これは私には良さそうです!アクセサーを使用しkeyedThingsてクラス内で自分をいじることができますが、他のオブジェクトは、可変で順序付けられていない (キーなし!) 対多の関係を扱っていると考えています。

私がやっていることのいくつかは「悪」かもしれないと心配している. 私はここで何か悪いことをしましたか?(たとえば、プロパティは変更可能であると想定されているためsetThings、を提供しないのは間違っていますか?)things

4

2 に答える 2

2

ここには何も悪いことはありません。順序付けられていない関係に必須のミューテーションメソッドはaddThings:とだけですremoveThings:KVCドキュメントを参照)。プロパティのアクセサはkeyedThingsKVCアクセサと衝突しないので、そこでも問題ありません。

安心するために、Appleの静的アナライザーがチェックすることが知られているのは、文書化されていないAPIへのメッセージだけです。それ以外に、実装の決定がアプリの動作に影響を与えない場合は、AppStoreの承認を得ることができます。

更新:私はこの質問に興味を持ち、KVCドキュメントを自分で読み直しました。ここの言語は私に一時停止を与えました:

To-manyの順序付けられていない関係は、ほとんどの場合、NSSetのインスタンスまたはサブクラスを使用してモデル化されます。その場合、Key-Valueコーディングは、プロパティのこれらのアクセサーパターンが見つからない場合、セットに直接アクセスします。通常、これらのメソッドを実装するのは、セットであるかのようにアクセスする必要があるカスタムコレクションクラスを使用している場合のみです。

作者は、あなたが削除しthingsて実装することenumeratorOfThings:を望んでいるようですmemberOfThings:

于 2010-03-20T02:47:37.070 に答える
2

私は辞書用のプロパティ (プライベートなプロパティでさえ) を作成しませんが、何も問題はないと思います。

…プロパティはおそらく変更可能setThingsであるため、提供しないのは間違っていますか?things

はい。setThings:KVC は、メソッドがないことを好みません。

于 2010-03-20T04:04:50.747 に答える