2014-03-04 20 views
0

在一個項目中,我有數據對象XXData和視覺代表這些對象的對象XXDataVisual。可能有多達10'0000個需要鬆散耦合的對象。只有XXDataVisual知道代表XXData使用指針作爲NSMutableDictionary的鍵的安全方法是什麼?

@interface XXDataVisual 
@property (strong) XXData *data; 
@end 

XXData一定不知道它的可視化表示:

@interface XXData 
// Elements 
@end 

要管理的可視化表示,我需要哪種視覺表現存在一個給定的數據元素的有效的查找。

我可以使用XXData實例的指針作爲安全標識數據元素的關鍵嗎?

哪個是使用現代Objective-C和Cocoa的最佳方法?

+0

號碼指定給每個XXData對象(其存儲在對象),並使用的NSNumber的關鍵。 –

+0

這是我目前所做的。但是創建新的唯一號碼需要時間,並且將該值存儲在XXData對象中需要內存。如果我可以使用XXData對象的指針作爲唯一標識符,它將解決這兩個問題。但我不確定這是否可行並被推薦去做。 – Flovdis

+0

您是否分析過並發現獨特數字的創建是您應用程序中的瓶頸? – andyvn22

回答

0

使用NSMutableDictionary是個壞主意。它會複製密鑰,因此您的內存使用量將會顯着增加。使用NSMapTable。您可以配置爲使用不可複製鍵和存儲到值弱引用,例如:

NSMapTable *mapTable = [NSMapTable mapTableWithKeyOptions:NSMapTableStrongMemory 
              valueOptions:NSMapTableWeakMemory]; 
+0

我目前正在檢查這種方法。 – Flovdis

+0

這是完美的工作,並解決了我的問題。 – Flovdis

2

要有一個NSDictionary類型的集合,其中你的鍵是指針,你可能需要一個NSMapTable類。

this link

NSMapTable(顧名思義)處於 一般意義上更適合的映射。根據NSMapTable的構造方式,NSMapTable可以處理NSDictionary的「key-to-object」風格映射,但它也可以處理「object-to-object」映射 - 也稱爲 「關聯數組」一張地圖」。

+0

謝謝你的提示! – Flovdis

相關問題