弱对象和弱引用

From Apache OpenOffice Wiki
Jump to: navigation, search



避免循环引用的一种策略是使用弱引用。对某个对象进行弱引用意味着:如果该对象仍然存在,就可以重新建立对它的硬引用,并且还存在另外一个对该对象的硬引用。


在插图循环引用所示的循环引用中,可能将对象 B 指定为具有对对象 A 的硬引用,但对象 A 仅具有对对象 B 的弱引用。如果对象 A 需要调用对象 B 中的方法,它会临时尝试使引用成为硬引用。如果成功,对象 A 就调用该方法,然后释放硬引用。


为了能够建立对某个对象的一个弱引用,该对象需要通过导出 com.sun.star.uno.XWeak 接口来明确支持弱引用。插图 对象 C 调用对象 B 的 XComponent 中的 dispose() 描绘了弱引用的UNO 机制。


将一个对象指定给某个弱引用时,弱引用对原始对象调用 queryAdapter(),并将其本身(以及 com.sun.star.uno.XReference 接口)作为引用添加到该适配器。

UNO 弱引用机制


从弱引用建立硬引用时,会调用适配器对象的 com.sun.star.uno.XAdapter 接口中的 queryAdapted() 方法。当原始对象仍然有效时,获得原始对象的一个引用,否则返回一个空引用。


如果原始对象被析构,适配器会通知中断适配器与弱引用之间的循环引用的所有弱引用。

编写 UNO 组件 介绍了 C++ 与 Java 中实现 Xweak 接口和弱引用的的 Helper 类。

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages