Използване на генерирани низове (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". Бих искал да знам дали това е безопасен начин за получаване и задаване на обектите в речника. Ако не, кой друг начин може да бъде най-добрият начин за „генериране“ на ключов обект от цяло число?


person Leg10n    schedule 21.12.2010    source източник


Отговори (2)


Да, това, което правите, е напълно безопасно и ще работи според очакванията. Ключовете на речника при получаване и настройка се сравняват с помощта на метода isEqual, който проверява само стойностите на низовете, а не техните адреси. "0" и "0" са равни, независимо дали са един и същ екземпляр или не.

Можете да прочетете повече за документацията isEqual в Справочник за протокол NSObject. Само имайте предвид, че == и isEqual не са едно и също нещо (== проверява адреси, isEqual проверява стойности).

person Itai Ferber    schedule 21.12.2010

Трябва да обмислите използването на NSNumber, ако очаквате всички те да са числа, но ще работи и с NSString. Ключовете на NSDictionary трябва да отговарят на протокола NSCopying и ключовете се сравняват с помощта на селектора isEqual:.

person Joe    schedule 21.12.2010