iPhone - есть ли что-то вроде NSMutableDictionary, которое не копирует свои ключи? - PullRequest
1 голос
/ 05 ноября 2010

У меня есть куча объектов Boy и куча объектов Girl.Я хочу вести список девочек, которые нравятся каждому мальчику.Это нормально, если несколько мальчиков любят одну и ту же девочку.

Я собирался использовать NSMutableDictionary, но метод setObject: forKey: этого класса копирует ключ перед добавлением пары в словарь.Поэтому вместо того, чтобы мальчику нравиться девочка, у нас был бы клон мальчика, который любил девушку.

Обычно я делал бы это, добавляя свойство favourgirl в класс Boy.Но проблема в том, что мальчики на самом деле являются объектами UIView, поэтому мне пришлось бы создать подкласс для нескольких разных подклассов UIView.

Очевидно, я мог бы написать свой собственный класс для этого.,,но кажется, что у Apple должен быть простой способ сделать то, что я хочу.,,Чего мне не хватает?

Важна скорость поиска.

Один из вариантов, о котором я подумал, состоял в том, чтобы реализовать копирование в виде категории на объектах UIView и просто сохранить метод методом объекта.Но я нервничаю по поводу того, какие побочные эффекты это может иметь.

РЕДАКТИРОВАТЬ: девушки не UIViews.Это объекты, которые содержат информацию, на которую мальчики будут время от времени обращаться.

Ответы [ 4 ]

2 голосов
/ 05 ноября 2010

Вы можете сделать это с CFMutableDictionaryRef (базовый базовый эквивалент NSMutableDictionary). Вы можете указать различные параметры поведения ключей и значений (например, сохранять или копировать их и т. Д.).

1 голос
/ 05 ноября 2010

Использование [NSValue valueWithNonretainedObject:] в качестве ключа - лучший способ, но будьте очень осторожны, чтобы объекты не были сохранены, поэтому вы должны обязательно удалить его из словаря, когда отпустите исходный объект.

0 голосов
/ 05 ноября 2010

Мне кажется, что вам действительно нужны отдельные классы моделей для мальчиков и девочек (тогда, возможно, BoyView и GirlView, если они на самом деле разные, в противном случае, возможно, простой PersonView).

Если у вас естьпростой класс, представляющий мальчика или девочку, тогда вы можете переопределить isEqual:, который, я думаю, устранит вашу проблему с ключами копирования NSDictionary (хотя я не уверен, что я также полностью понимаю вашу модель).

0 голосов
/ 05 ноября 2010

Я не уверен, что понимаю модель. Это то, что вы хотите иметь возможность сопоставить каждого мальчика одной любимой девушке? Итак, было бы хорошо иметь карту от мальчика до вектора девочки? Если это так, вы можете использовать std :: map, std :: vector> ... другими словами, перейти на Objective-C ++ и использовать карту библиотеки стандартных шаблонов и векторные контейнеры.

...