NSMutableDictionary. Использование объекта для хранения целочисленного значения - PullRequest
0 голосов
/ 26 октября 2011

Я хотел бы добавить экземпляры моего пользовательского класса в NSMutableDictionary, чтобы каждый экземпляр имел соответствующее целочисленное значение?Позже я хочу получить целочисленное значение, используя экземпляр класса в качестве ключа.

Ответы [ 2 ]

2 голосов
/ 26 октября 2011
  1. NS*Dictionary требуются объекты как для ключей, так и для значений. Если вы хотите вставить целое число в экземпляр коллекции (словарь, массив, набор и т. Д.), То сначала вы должны «упаковать» его, используя NSNumber; [NSNumber numberWithInt:x];.

  2. Ключи к NSMutableDictionary обычно должны быть копируемыми и иметь стабильный хэш и стабильное поведение isEqual: (согласно документации). Таким образом, ваши экземпляры вашего пользовательского класса должны соответствовать протоколу NSCopying и должным образом поддерживать hash и isEqual:. hash и isEqual: могут "просто работать", если равенство указателей достаточно хорошее. Копирование может быть сложным.

В целом, однако, редко бывает карта между экземплярами и целочисленными значениями. Почему бы просто не добавить @property в ваш класс?

* * 1 022 * т.е. 1023 *
@property int magicNumber;

Гораздо проще и чертовски эффективнее.

<Ч />

Также обратите внимание, что если вам нужно связать что-то с существующим экземпляром, где вы не можете изменить класс, вы должны использовать objc_setAssociatedObject() и objc_getAssociatedObject(). Они не требуют, чтобы экземпляр был NSCopying способным и были относительно эффективными (хотя и не такими эффективными, как @property).

0 голосов
/ 26 октября 2011

Вы должны иметь возможность просто использовать [myMutableDict setObject: [NSNumber numberWithInt: myInt] forKey: myClassInstance];

По крайней мере, это то, что я прочитал из того факта, что setObject принимает (id) в качестве типов параметров.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...