Как хранить пары объект + строка без сохранения объектов и какой тип хранилища использовать? - PullRequest
0 голосов
/ 11 августа 2009

Я реализую класс, который должен хранить произвольные объекты вместе со строкой. т.е.

myUIViewObject, @"that's a nice view"
myUIViewController, @"not really special"
myOtherObject, @"very important one"

этот список может быть расширен и изменен в любое время, поэтому я подумал об использовании NSMutableDictionary здесь. Но я не совсем уверен ...

Объект должен быть ключом, т.е. я хочу легко найти подходящую строку для myUIViewController или myOtherObject, когда я спрашиваю об этом, вот так:

- (NSString*)checkObjNoteStringForObject:(id)anyObjectInList;

Другая проблема заключается в том, что когда объект добавляется в этот «список», я не хочу, чтобы он сохранялся из-за этого. NSMutableDictionary сохраняет свое содержимое, верно? Могу ли я просто отправить -релиз после этого, чтобы отменить это нежелательное поведение, а при удалении из списка просто отправить -retain перед этим? Или есть более элегантный способ?

Что вы предлагаете? Спасибо всем @

1 Ответ

0 голосов
/ 11 августа 2009

Если ваш словарный ключ не сохранен, то после его освобождения доступ к словарю приведет к неопределенному поведению (на практике они потерпят крах, если поиск попадет в этот элемент словаря). Чтобы делать то, что вы хотите, вам нужна стратегия удаления объектов из словаря при необходимости.

Если у вас есть один - например, переопределяя объекты -dealloc и удаляя их оттуда - вы можете делать то, что хотите, используя +[NSValue valueWithNonretainedObject:]. NSValue будет ссылаться на ваш объект, не сохраняя его, а словарь скопирует NSValue (ключи скопированы, а не сохранены). Просто не забудьте создать NSValue для каждого раза, когда вы хотите что-то найти в словаре; вспомогательная функция или метод - хорошая идея.

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