Использование сгенерированных строк (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 с тем же значением, я имею в виду, как имеющий, две строки: «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