弱对象和弱引用

From Apache OpenOffice Wiki
< Zh‎ | Documentation
Revision as of 08:01, 1 July 2008 by Jirong (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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