弱引用的其他用途?

时间:2009-09-16 16:44:15

标签: language-agnostic weak-references

我知道弱引用是memoizing潜在大型数据集的良好候选者,而Wikipedia's article on weak references仅列出“跟踪应用程序中引用的当前变量”和语句“Another使用弱引用是在写缓存“。

其他一些情况(更具体而不仅仅是“缓存结果”)使用弱引用是一个好主意 TM

4 个答案:

答案 0 :(得分:1)

在Flex中,use weak references to avoid memory leaks

如果事件处理程序是短期实例对象的成员,则将处理程序作为对更长寿命的对象的强引用传递可能会使短期实例不必要地保持活动状态。

答案 1 :(得分:1)

我使用弱引用来做一些事情......

我喜欢在.Net中创建“弱事件”以避免可观察者让观察者活得太久。

我还将弱事件用于detect memory leaks

答案 2 :(得分:1)

弱引用的主要正确用法是识别其重要性源于对它们的强引用的存在的事物。最常见的两种情况是:

  • 一个对象包含对某些东西的引用,而不是因为它"关心"关于有问题的对象,而是因为其他关心对象的实体可能希望它对它做一些事情。如果过了一段时间没人关心这个对象,那么其他实体就没有理由代表"所有关心它的实体继续操纵它#34;。

  • 保持对同一个不可变对象的多个引用的内存开销可能远低于保存对许多相同对象的引用的内存开销,并且比较对同一对象的引用可能比比较相同的对象快得多。创建不可变对象,放弃它,使其被收集以及创建相同对象的内存成本与创建对象以及稍后返回对象的成本基本相同。返回对现有对象的引用,无论如何都必须保留是一个巨大的胜利;返回对有资格收集但尚未收集的对象的引用可能会或可能不会获胜(它通常是轻微的胜利,但在代际GC中,它有时会略微损害性能) ;在许多情况下,后者的好处不足以证明保持对象的存活时间比其他方式更长。

答案 3 :(得分:0)

在Python中,垃圾收集器使用引用计数来决定何时“销毁”或以其他方式取消分配对象。正常的循环引用可能导致对象永远不会被垃圾收集,因为它们的引用计数分别保持在1或更高;但using weak references将允许在超出范围时正确清理这两个/所有对象。