2010-12-21 46 views
2

鍵我願做這樣的事情:使用「生成的字符串」(stringWithFormat)作爲NSDictionary的

#define GETKEY (a) ([NSString stringWithFormat:@"%d",a]) 

NSMutableDictionary *mutableDictionay=[NSMutableDictionary dictionary]; 
//population of dictionary 
[mutableDictionary setObject:anObject forKey:GETKEY(someIntValue)]; 
//... then retrive the object 
[mutableDictionary getObjectForKey:GETKEY(someIntValue)]; 

但我擔心的stringWithFormat方法返回的NSString的不同實例具有相同值,我的意思是喜歡有2個字符串:「0」和另一個值爲「0」的實例。我想知道這個是一種安全的方式來獲取和設置字典中的對象。如果沒有,什麼其他方式可能是從一個整數「生成」一個關鍵對象的最佳方式?

回答

3

是的,你在做什麼是完全安全的,並會按預期工作。使用isEqual方法比較獲取和設置字典時的密鑰,該方法僅檢查字符串的值,而不檢查字符串的地址。無論它們是否是相同的實例,「0」和「0」是相等的。

您可以在NSObject Protocol Reference中閱讀有關isEqual文檔的更多信息。請注意0​​和isEqual不是一回事(==檢查地址,isEqual檢查值)。

0

你應該考慮使用NSNumber,如果期望它們都是數字,但它也可以與NSString一起使用。 NSDictionary鍵必須符合NSCopying協議,並使用isEqual:選擇器比較鍵。

相關問題