弱引用的其他用途?
我知道弱引用是记录潜在大量数据集的好候选者,而维基百科关于弱引用的文章只列出了“跟踪应用程序中引用的当前变量的跟踪”以及“弱引用的另一种用途是书面的一个缓存“。
什么是其他情况(比“缓存结果”更具体),其中使用弱引用是一个好主意?
在Flex中,使用弱引用来避免内存泄漏。
如果事件处理程序是短期实例对象的成员,那么将该处理程序作为强活动的引用传递给活动较长的对象可能会使短期实例不必要地活动。
我使用弱引用的几件事情...
我喜欢在.Net中创建“弱事件”,以避免观察者死守观察者太久。
我也用弱事件来检测内存泄漏。
弱引用的主要正确用法是确定其重要性来源于强引用它们的事物。 两种最常见的情况是:
一个对象拥有某种东西的引用,并不是因为它“关心”了所讨论的对象,而是因为其他关心对象的实体可能希望它对它做某些事情。 如果过了一段时间没有人关心这个对象,那么没有理由为什么其他实体应该继续代表“所有关心它的实体”来操纵它。
持有对同一个不可变对象的许多引用的内存开销可能远低于持有对许多相同对象的引用的内存开销,并且比较对同一对象的引用可能比比较相同对象快得多。 创建一个不可变对象,放弃它,让它被收集以及创建一个相同的对象的内存成本与创建一个对象的成本基本相同,然后返回第二个引用。 返回对现存对象的引用无论如何都必须保留,这是一个巨大的胜利; 返回一个有资格收集但尚未收集的对象的参考可能会或可能不会成为赢家(这通常是轻微的胜利,但是在一代GC中它有时会损害性能); 在很多情况下,后者的好处并不足以证明保持一个物体的存活时间比其他方式所需的时间要长。