鉴于以下声明:
var XML:IXMLDocument;
和
var XML:TXMLDocument;
从最终用户的角度来看,使用XML变量有什么不同?什么是首选?
答案 0 :(得分:1)
差异在documentation:
中解释在没有所有者的情况下创建TXMLDocument时,它的行为类似于接口对象。也就是说,当释放对其接口的所有引用时,将自动释放TXMLDocument实例。但是,当使用所有者创建TXMLDocument时,它的行为与任何其他组件一样,并由其所有者释放。将组件选项板中的TXMLDocument组件添加到表单或数据模块时,将使用所有者自动创建该组件。使用全局LoadXMLDocument函数(或通过XML数据绑定向导生成的函数来返回文档的根节点)创建TXMLDocument组件时,该函数将创建一个没有所有者的TXMLDocument实例。
因此,如果在没有所有者的情况下创建对象,则其生命周期由接口引用计数管理。您应该声明您的文档变量:
var
XMLDocument: IXMLDocument;
只要此变量保留在范围内,并且未分配新值,XML文档对象将保持活动状态。一旦变量离开作用域或被赋值,XML文档就会被销毁。
另一方面,如果对象是使用所有者创建的,则该所有者负责销毁该对象。在这种操作模式中,无论是通过其接口引用对象还是直接引用实现对象,都无关紧要。但是,我觉得引用实现对象是惯用的,就像你对任何其他TComponent
实例一样。
var
XMLDocument: TXMLDocument;
您选择的路由取决于您希望在代码中使用哪个生命周期管理选项。我认为不可能给你更多的指导。这两种选择都有其自己的位置。