NS*Dictionary
требуются объекты как для ключей, так и для значений. Если вы хотите вставить целое число в экземпляр коллекции (словарь, массив, набор и т. Д.), То сначала вы должны «упаковать» его, используя NSNumber
; [NSNumber numberWithInt:x];
.
Ключи к NSMutableDictionary
обычно должны быть копируемыми и иметь стабильный хэш и стабильное поведение isEqual: (согласно документации). Таким образом, ваши экземпляры вашего пользовательского класса должны соответствовать протоколу NSCopying
и должным образом поддерживать hash
и isEqual:
. hash
и isEqual:
могут "просто работать", если равенство указателей достаточно хорошее. Копирование может быть сложным.
В целом, однако, редко бывает карта между экземплярами и целочисленными значениями. Почему бы просто не добавить @property
в ваш класс?
* * 1 022 * т.е. 1023 *
@property int magicNumber;
Гораздо проще и чертовски эффективнее.
<Ч />
Также обратите внимание, что если вам нужно связать что-то с существующим экземпляром, где вы не можете изменить класс, вы должны использовать objc_setAssociatedObject()
и objc_getAssociatedObject()
. Они не требуют, чтобы экземпляр был NSCopying
способным и были относительно эффективными (хотя и не такими эффективными, как @property
).