Быстрые циклы сильных ссылок с массивами
Если у меня есть класс 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
,
Хотя возможно создание "слабых массивов", это не очень хорошее применение. Родители в вашем примере "владеют" (имеют сильную ссылку и поддерживают в живых) своих детей. Дети в этой системе не "владеют" своими родителями, и поэтому не должны иметь сильных ссылок.