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

он просто работает.....