Быстрые циклы сильных ссылок с массивами - PullRequest
0 голосов
/ 06 ноября 2018

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

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

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

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

, поскольку у класса B всегда должен быть «родительский» класс A.

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

1 Ответ

0 голосов
/ 06 ноября 2018

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

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

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

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

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