Хранение ints в словаре

Как я понимаю, в Objective-C вы можете помещать объекты только в словари. Поэтому, если бы я создал словарь, он должен был бы иметь все объекты. Это означает, что мне нужно включить мои ints в NSNumber, правильно?

Soo...

NSNumber *testNum = [NSNumber numberWithInt:varMoney];


NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:@"OMG, Object 1!!!!" forKey:@"1"];
[dictionary setObject:@"Number two!" forKey:@"2"];
[dictionary setObject:testNum forKey:@"3"];


NSNumber *retrieved = [dictionary objectForKey:@"3"];
int newVarMoney = [retrieved intValue];

Где varMoney - это int, который был объявлен ранее. Мой вопрос в том, есть ли лучший способ хранить "int" в словаре, чем помещать его в NSNumber?

Спасибо!

Изменить: 04/25/13

Прошло много времени с тех пор, как я задал этот вопрос. Для людей, которые наткнулись на него в будущем, есть более простые способы сделать это с помощью Apple LLVM Compiler 4.0, который по умолчанию используется в Xcode. (АРК)

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
[dictionary setObject:@1337 forKey:@"1"];

Чтобы он быстро создал объекты NSNumber, используйте синтаксис @1337. Работает с переменными, поэтому мое выше может стать:

[dictionary setObject:@(varMoney) forKey:@"3"];

или

dictionary[@"mykey"] = @1337;

Simpler.

Ответы

Ответ 1

Вы правы, NSNumber - это нормальный способ справиться с этой ситуацией. Вы также можете использовать NSValue или NSDecimalNumber.

Ответ 2

Если вы готовы вернуться к использованию Core Foundation (CFDictionaries), вы можете хранить все, что захотите. Я определенно сделал словари, в которые я помещал произвольные значения void *.

Вам нужно сделать немного больше сантехники, но не так много, и все это задокументировано.

Ответ 3

Извините, но нет:( Не насколько я знаю. Причина в том, что целые числа не являются объектами, а NSDictionary хранит только объекты.