弱引用的其他用途?

8
我知道弱引用是记忆化潜在大数据集的好选择,维基百科关于弱引用的文章仅列出“跟踪应用程序中当前被引用的变量”和“另一种使用弱引用的方法是编写缓存”的陈述。
除了“缓存结果”之外,使用弱引用的其他情况是哪些(更具体)?

为什么这是社区Wiki?这是一个认真的问题! - Dario
这是 CW,因为没有一个正确的答案。 - Mark Rushakoff
4个回答

2
弱引用的主要正确用法是识别那些重要性源自强引用存在的东西。最常见的两种情况是:
1. 一个对象持有对某个东西的引用,不是因为它关心这个对象本身,而是因为其他关心该对象的实体可能希望使用它做一些事情。如果一段时间后没有人再关心这个对象了,就没有理由让其他实体继续代表“所有关心它的实体”操纵它。
2. 持有对同一个不可变对象的多个引用的内存成本可能比持有对许多相同对象的引用的内存成本低得多,并且比较对同一对象的引用可能比比较相同对象快得多。创建一个不可变对象,然后放弃它,使其被收集,并创建一个相同的对象的内存成本与创建一个对象并稍后返回第二个引用的成本基本相同。返回对现有对象的引用,这个对象必须保留,是一个大胜利;返回对一个可回收但尚未被回收的对象的引用可能是一个胜利(通常是一个轻微的胜利),但在分代 GC 中有时会稍微降低性能;在许多情况下,后一种好处不足以证明需要将对象保持活动状态的时间比必要时间更长。

1
在Flex中,使用弱引用以避免内存泄漏
如果事件处理程序是短暂实例对象的成员,则将处理程序作为强引用传递给将要存在更长时间的对象可能会不必要地保持短暂实例的存在。

1

我在一些事情上使用弱引用...

我喜欢在 .Net 中创建“弱事件”,以避免可观察对象使观察者保持太长时间的活性。

我还使用弱事件来检测内存泄漏


0
在Python中,垃圾回收器使用引用计数来决定何时“销毁”或释放对象。正常的循环引用可能会导致对象永远不会被垃圾回收,因为它们的引用计数分别保持在1或更高;但是使用弱引用将允许两个/所有对象在超出范围时得到适当的清理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接