2010-11-05 29 views
1

我有一堆Boy對象和一堆Girl對象。我想保留每個男孩最喜歡的女孩的名單。如果多個男孩喜歡同一個女孩,那就沒問題。iPhone - 有沒有像NSMutableDictionary不復制其密鑰?

我打算使用一個NSMutableDictionary,但該類的setObject:forKey:方法在將該對添加到字典之前複製密鑰。所以不是喜歡這個女孩的男孩,我們會克隆喜歡這個女孩的男孩。

通常情況下,我會通過向Boy類添加favoriteGirl屬性來完成此操作。但問題是,男孩真的是UIView對象,所以我將不得不繼承一大堆不同的UIView子類。

很明顯,我可以寫我自己的自定義類來做到這一點。 。 。但感覺蘋果必須有一個簡單的方法來做我想做的事。 。 。我錯過了什麼?

查找的速度很重要。

我想到的一個選擇是在UIView對象上實現複製作爲一個類別,並讓該方法保留該對象。但是我對這可能產生的副作用感到緊張。

編輯:女孩不是UIViews。它們是包含男孩不時想要提及的信息的對象。

回答

2

您可以用CFMutableDictionaryRef(核心基礎相當於NSMutableDictionary)做到這一點。你可以指定不同的選項來說明鍵和值的行爲方式(比如它們是保留還是複製等)。

0

我不確定我是否理解模型。是否希望能夠將每個男孩映射到一個最喜歡的女孩?那麼,從男孩到女孩的矢量圖都可以嗎?如果是這樣,你可以使用std :: map,std :: vector> ...換句話說,轉到Objective-C++並使用標準模板庫的映射和向量容器。

0

這聽起來對我說,你真正需要的是男孩和女孩單獨的模型類(那麼也許BoyView和GirlView如果他們實際上是不同的,否則也許一個簡單的PersonView)。

如果你有一個簡單的類來表示一個男孩或女孩,那麼你就可以覆蓋isEqual:認爲會消除的NSDictionary複製鑰匙您的問題(雖然我不知道我完全理解你的模型要麼)。

1

使用[NSValue valueWithNonretainedObject:]作爲關鍵是一種更好的方法,但要小心不要保留這些對象,因此在釋放原始對象時必須確保將其從字典中刪除。

相關問題