NSNumber как ключ для NSDictionary
Мне было интересно, как ключи работают в NSDictionary. Обычно я использую NSString в качестве ключа, например:
NSString *stringKey = @"stringKey";
[mydict objectForKey:stringKey];
Что делать, если я хотел использовать NSNumber:
NSNumber *numberKey = [NSNumber numberWithInt:3];
[mydict objectForKey:numberKey];
Идет ли словарь искать ключ с номером 3? или он просто сравнил адрес numberKey?
Ответы
Ответ 1
Две клавиши равны тогда и только тогда, когда [key1 isEqual:key2]
. Некоторые классы могут идти с реализацией -[NSObject isEqual:]
return self == other;
, но это довольно часто для классов (например, NSString
, NSNumber
и т.д.), Чтобы переопределить его, чтобы сделать больше контекстно-зависимого сравнения.
Ответ 2
Я думаю, что он посмотрит на значение NSNumber. Я использую NSNumber в качестве ключа для словаря.
1. сохраните ключ в view.tag
view.tag = [self getUniqueNSIntegerKey]; → получить уникальный ключ и сохранить в view.tag
[словарь setOjbect: объект forKey: [NSNumber numberWithInt: view.tag]];//добавление объекта
2. получить объект с помощью view.tag позже
object = [словарь objectForKey: [NSNumber numberWithInt: view.tag]];//получить объект через view.tag
он просто работает.....