Использование «сгенерированных строк» ​​(stringWithFormat) в качестве ключей для NSDictionary - PullRequest
2 голосов
/ 21 декабря 2010

Я хотел бы сделать что-то вроде этого:

#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 ".Я хотел бы знать, является ли этот безопасный способ получить и установить объекты в словаре .Если нет, Какой другой способ может быть лучшим способом "генерировать" ключевой объект из целого числа?

Ответы [ 2 ]

3 голосов
/ 21 декабря 2010

Да, то, что вы делаете, совершенно безопасно и будет работать, как и ожидалось. Ключи словаря при получении и настройке сравниваются с помощью метода isEqual, который проверяет только значения строк, а не их адреса. «0» и «0» равны, независимо от того, являются ли они одним и тем же экземпляром.

Подробнее о документации isEqual можно прочитать в справочнике NSObject Protocol . Просто помните, что == и isEqual - это не одно и то же (== проверяет адреса, isEqual проверяет значения).

0 голосов
/ 21 декабря 2010

Вы должны рассмотреть возможность использования NSNumber, если ожидаете, что все они будут числами, но это также будет работать с NSString. Ключи NSDictionary должны соответствовать протоколу NSCopying, а ключи сравниваются с помощью селектора isEqual:

.
...