2015-10-19 3 views
0

Я нахожусь в маленькой загадке. У меня есть ситуация, когда я могу создать круговую зависимость между двумя объектами уровня сестры. Я хочу, чтобы оба остались в памяти, и ни один пример не является более/менее важным, чем другой. Должен ли я просто произвольно сделать указатель одной стороны слабым, а другой сильным, или я могу уйти с тем, чтобы обе стороны были слабыми?Использование двунаправленных слабых указателей

Допустим, у вас объектную модель со структурой, как это ...

ADatabaseTable 
    -(NSArray)fields 
     FieldInfo (field A) 
     FieldInfo (field B) 
    -(NSArray)values 
     FieldValue (field A - record 1) 
     FieldValue (field A - record 2) 
     FieldValue (field B - record 1) 
     FieldValue (field B - record 2) 

... и вы хотите FieldValue иметь ссылку на FieldInfo и наоборот.

Как бы вы указали атрибуты свойств (слабый/сильный), чтобы они ссылались друг на друга?

Благодаря

+0

Какие события заставили бы вас удалить «FieldValue» из таблицы? Какие события заставили бы вас удалить поле «FieldInfo»? –

+0

Ну, я думаю, приложение shutting down или вид, отображающий эту информацию. –

+0

Насколько разумно иметь родительскую 'таблицу', чтобы оба из этих братьев и сестер определяли свой жизненный цикл? Имеете ли вы когда-либо поле «FieldInfo» или «FieldValue» без родительской таблицы? – Jonah

ответ

2

Предположительно ADatabaseTable имеет сильные ссылки на fields массива и values массива.

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

Таким образом, вы можете сделать информацию и значения, ссылающиеся друг на друга слабо.