3

我想保留mutable array引用了一組UIViewsNSMapTable非常適合這種需求,除了一個細節... NSMapTable想要一個關鍵的每個價值它擁有。是否有NSMaptable的NSMutableArray版本?

有沒有像NSMapArray?如果沒有,我是否需要爲我存儲的所有值生成丟棄唯一鍵?我應該使用NSUUID來生成密鑰名稱嗎?

編輯:請不就是我說的是真正,自我歸零引用。 CFArrays和NSValue解決方案存儲引用,當引用的對象被釋放時它們不會自行刪除它們......它們最終只會成爲垃圾指針。

+2

**地圖**的重點在於它具有_key_和_value_。如果你不想要_key_部分,那麼你不需要一個** map **,你想要一個** set **。 – anthropomorphic 2013-03-26 06:35:45

+1

NSSet/NSOrderdSet及其可變版本可以在沒有密鑰的情況下爲您服務。 – 2013-03-26 06:35:49

+0

NSSet/NSOrderdSet只存儲弱引用? – zakdances 2013-03-26 06:48:13

回答

1

您可以嘗試在iOS 6中,這就像一個NSSet,與弱引用支持NSHashTable(和NSPointerArray看起來不錯過,但醫生說這不支持ARC下弱參考)。

編輯:有些人似乎認爲與文檔所述相反,NSPointerArray確實 ARC下的零弱引用。 OS X 10.8 Foundation發行說明也這樣說,即使類文檔中有相反的說明(iOS發行說明中沒有說)。畢竟,這就是爲什麼他們在OS X 10.8和iOS 6.0中添加了+ weakObjectsPointerArray構造函數和NSPointerFunctionsWeakMemory選項...您應該嘗試...

+0

這很好,我不知道關於NSHashTable。有沒有這樣的有序集? – zakdances 2013-03-26 11:40:40

+0

正如我在編輯中所說的那樣,即使文檔在iOS中的ARC下是否會引用零弱引用,也應該嘗試使用'NSPointerArray'。它看起來像是,文檔已過時,但在做出假設之前,您一定要嘗試。 – Guillaume 2013-03-26 13:48:25

+0

這聽起來像我正在尋找的東西。從文檔:'在垃圾收集環境中,如果您指定了一個清零弱存儲器配置,如果收集到一個元素,則將其替換爲NULL值。「這並不令人困惑。 – zakdances 2013-03-26 13:50:58

0

你說在數組中存儲弱引用很重要。這可以使用Core Foundation陣列。你會在這裏找到答案:Non-retaining array for delegates

+0

這是迄今爲止最好的答案,但是我問這個問題,看看是否有更好的答案比分類或CFArray黑客。正如你可能已經閱讀過評論,這種方法存在一些問題(例如,參考文獻不會是自我零)。 – zakdances 2013-03-26 06:58:18

0

你說的有點矛盾:一方面你說你想要他們要將弱引用調零,在這種情況下,您的數組在被釋放後將被填充nil元素。另一方面,你說你想要它像NSMapTable,它可能會在弱引用被釋放後刪除元素。這是什麼?

如果你希望它是真正的零弱引用(這將離開你的數組中的元素nil),一個很好的解決方案是使用一個std::vector<id __weak> - 其元素歸零弱引用一個C++載體。 ARC將處理所有細節。

+0

我的理解是nsarrays不能保存零值 – zakdances 2013-05-06 14:36:10

+1

@yourfriendzak:嗯,這就是OP要求的 - 「自我調零參考」。 – newacct 2013-05-06 23:30:24