Мне интересно, возможно ли иметь что-то похожее на объект Dictionary
ActionScript 3 со слабыми ключами в Objective-C. Я хочу иметь возможность «прикрепить» экземпляр класса к другим произвольным экземплярам.
Пример;
MetaData *meta = [MetaData metaDataForObject:someObject];
meta.whatever = foo;
И позже:
foo = [MetaData metaDataForObject:someObject].whatever;
[foo doStuff];
Сложность состоит в том, что после того, как возражение, на которое ссылается someObject
, является dealloc'd, я хочу, чтобы объект, на который ссылается meta
, был освобожден (и dealloc'd, при условии, что никакой клиентский код не сохранил его).
возможно? Я посмотрел на +[NSValue valueWithNonretainedObject:]
, но я не уверен, что это то, что я хочу, потому что там, когда я позже запрашиваю -[NSValue nonretainedObjectValue]
, кажется, что я получу указатель на мусор (как NSValue может обнулить указатель, когда объект был dealloc'd?).
Спасибо
Benjamin
Обновление 23 сентября 2011 года: Я считаю, что способ сделать это с помощью objc_setAssociatedObject
и связанных функций. См. Objective-C Runtime Reference .