2010-12-21 30 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:选择器比较键。

相关问题