繁体   English   中英

Swift中的双重链表:为什么只有一个引用声明为弱?

[英]Doubly linked list in Swift: why is only one of the references declared weak?

class DoublyLLNode<T>{

var value<T>?
weak var prev: DoublyLLNode? = nil
var next: DoublyLLNode? = nil

}

为什么一个价值,无论是上一个还是下一个,都显得weak 我们难道不能让两者都变弱吗? 如果是,为什么? 如果没有解释。

如果两者都很弱,则不会对任何节点进行任何强引用,并且将释放所有节点。

当存在父/子关系时,您通常对父项中的子项具有强引用,并且子项对其父项具有弱引用。 想想next的“孩子”和prev “父”。

如果两者都很强,那么最终会有参考周期。

如果对对象有weak引用,则可以随时取消分配该对象,包括在仍然保持对它的弱引用时。 如果对对象有strong引用,则在强引用消失之前,不会释放该对象。

因此,如果链接列表中的所有项目仅具有彼此的弱引用,则在您使用它们时可以全部取消分配,因为没有对任何项目的强引用。

你也不能使两个引用都很强大。 您将创建一个称为强引用循环的东西。 这是两个对象通过强引用相互引用的时候。 因此,两个对象中的任何一个都不可能被释放(因为它们相互引用)并且你浪费了记忆。

在链表节点,你想引用(或者是一个nextprev参考)要坚强。 然后链表中的每个对象都有一个强引用。 如果next引用很强,那么对于任何节点x ,节点x - 1将具有对它的强引用(并且可能是使用链接列表的任何代码将具有对头部的强引用)。 如果prev指针很强,那么对于任何节点x ,节点x + 1将具有对它的强引用(并且你需要以某种方式确保对尾部有强引用...否则,尾部将被释放,然后是尾部前面的节点,并且一直打开直到所有节点都消失了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM