Быстрые циклы сильных ссылок с массивами

Если у меня есть класс A, у которого есть переменная x, которая является массивом класса B, и класс B, у которого всегда есть переменная y, родительская для класса A, как мне установить, чтобы избежать сильных циклов ссылок. Я получаю сообщение об ошибке

class A {
weak var x = [B] 
...}

(даже если я сделаю это [B]?), и это кажется неправильным способом поставить

class B {
weak var y = A
...}

так как класс B всегда должен иметь "родительский" класс A.

Я представляю, что это стандартная установка, поэтому удивляюсь нормальному шаблону. Любая помощь высоко ценится.

1 ответ

Решение

Если B всегда будет иметь родителя, и родитель будет гарантировать, что он не может уйти раньше своих детей, тогда вы можете использовать unowned скорее, чем weak, Это сказало, unowned несколько опасно, потому что, если вы ошибаетесь, это приведет к краху.

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

Ключ в фразе "всегда должен иметь" родителя "." Если ты имеешь ввиду, то используй слабый. Если вы имеете в виду, то должны использовать unowned,

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

Другие вопросы по тегам