问题标签 [reference-cycle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1117 浏览

ios - 使用 Timer 的参考周期中的强、弱或无主

我有一个对重复调用闭包的对象UIViewController的引用。对象在其块中Timer捕获Timerself据我了解,这导致retains cycle了视图控制器和块之间的关系。有一个逻辑是把定时器设置为nil,然后retain cycle被打破,但它可能不会被执行。

我的问题如下:只要应用程序存在,视图控制器就会存在(至少在当前实现中)。在这种情况下 - 我应该如何最好地处理这个保留周期?我应该忽略它,因为无论如何都不会释放视图控制器。我是否应该考虑未来可能发生的变化并使用unownedweak参考以及哪一个来处理它。我想应该是unowned因为计时器仅由 View Controller 保留,并且一旦 View Controller 释放就应该释放它,但不确定我是否遗漏了什么。先感谢您。以下代码是我正在谈论的简单示例。Class A是视图控制器。

0 投票
2 回答
68 浏览

glib - Vala 闭包参考循环

我正在 Vala 中编写一个类,在其中我将同一个对象的两个属性绑定在一起,并使用一个闭包将一个对象转换为另一个对象。

闭包保留一个引用this(因为我使用this.scale),它创建了一个引用循环,即使对它的所有其他引用都丢失了,它也使我的类保持活动状态。

只有当引用计数达到 0 时,绑定才会被移除,但只有在投标及其闭包被移除时,refcount 才会达到 0。

有没有办法让闭包引用this弱?还是在 refcount 达到 1 时进行探测以将其删除?

0 投票
0 回答
39 浏览

javascript - 在JavaScript中的对象函数中删除对象的引用本身

我想通过它的功能从对象集合中删除对象本身。如果我像下面这样编码,它当然会引用循环或任何其他错误。

我知道我可以用delete obj_collec['obj1']. 但我想知道如果我像上面那样编码会发生什么。

0 投票
1 回答
39 浏览

kotlin - 如果传递了一个捕获封闭“this”的对象,是否有一个注释会触发警告?

我有一个带有这个签名的 Kotlin 函数:

该函数所做的是附加disposer到一个幻像引用并安排它在obj垃圾收集时关闭(即当幻像引用对象入队时)。的类obj应该这样称呼它:

Closeable(让我们忽略使用 general s依赖 this 是否是一个好主意;有问题的实际资源是由本机/JNI 代码管理的指针——我正在尝试遵循Hans Boehm 的建议。但所有这些都与这个问题。)

我担心这种设计很容易无意中传递this从外部范围捕获的对象,创建引用循环并完全防止对象被垃圾收集:

有没有我可以添加到disposer参数中的注释,在这种情况下会触发警告?