1

たくさんのBoyオブジェクトとたくさんのGirlオブジェクトがあります。それぞれの男の子が一番好きな女の子のリストを残したいです。複数の男の子が同じ女の子が好きなら大丈夫です。

NSMutableDictionaryを使用するつもりでしたが、そのクラスのsetObject:forKey:メソッドは、ペアをディクショナリに追加する前にキーをコピーします。つまり、男の子が女の子を好きになるのではなく、男の子が女の子を好きになるクローンを作成します。

通常、これを行うには、favoriteGirlプロパティをBoyクラスに追加します。しかし、問題は、男の子が実際にはUIViewオブジェクトであるため、さまざまなUIViewサブクラスをサブクラス化する必要があることです。

明らかに、これを行うために独自のカスタムクラスを作成することができます。。。しかし、Appleは私がやりたいことをする簡単な方法を持っているに違いないように感じます。。。私は何が欠けていますか?

ルックアップの速度は重要です。

私が考えたオプションの1つは、UIViewオブジェクトにカテゴリとしてコピーを実装し、メソッドにオブジェクトを保持させることでした。しかし、私はこれがどのような副作用をもたらす可能性があるかについて神経質になっています。

編集:女の子はUIViewsではありません。それらは、男の子が時々参照したい情報を含むオブジェクトです。

4

4 に答える 4

2

CFMutableDictionaryRefこれは、 (Core Foundationに相当する)を使用して行うことができますNSMutableDictionary。キーと値の動作に関するさまざまなオプションを指定できます(保持されるかコピーされるかなど)。

于 2010-11-05T19:36:45.400 に答える
1

キーとして使用[NSValue valueWithNonretainedObject:]する方が良い方法ですが、オブジェクトが保持されないように注意してください。元のオブジェクトを解放するときに、必ずディクショナリからオブジェクトを削除する必要があります。

于 2010-11-05T20:18:40.233 に答える
0

モデルを理解しているのかわかりません。各男の子を1人のお気に入りの女の子にマッピングできるようにしたいですか?だから、男の子から女の子のベクトルへの地図を持っていても大丈夫でしょうか?その場合は、std :: map、std :: vector> ...を使用できます。つまり、Objective-C ++に移動して、標準テンプレートライブラリのマップとベクトルコンテナを使用できます。

于 2010-11-05T19:08:22.407 に答える
0

本当に必要なのは、男の子と女の子の別々のモデルクラスであるように思えます(実際に異なる場合はBoyViewとGirlView、そうでない場合は単純なPersonView)。

男の子または女の子を表す単純なクラスがある場合は、これをオーバーライドisEqual:して、NSDictionaryコピーキーの問題を解消できると思います(ただし、モデルを完全に理解しているとは言えません)。

于 2010-11-05T19:16:13.097 に答える