要求TComponent作为所有者来实例化某种对象似乎完全无关紧要。为什么有这么多的Delphi组件需要这样做?
例如,TXMLDocument需要一个TComponent对象来实例化。
为什么会这样?如果有很好的理由,我应该用什么来“做正确的事情”?
发布于 2009-01-23 21:14:19
所有者组件应该管理其拥有的所有组件。当所有者被销毁时,所拥有的组件将自动销毁。
这有助于开发人员从工具面板中拖动组件,将它们放在窗体上,并只挂起事件来完成工作,而无需担心管理组件的生命周期。
该表单是拖放到该表单上的所有组件的所有者。Application对象是窗体的所有者。当应用程序关闭时,Application对象将被销毁,这反过来又会销毁表单和所有组件。
但在创建组件时,所有者实际上并不是必需的。如果您将Nil传递给该参数,则将在没有所有者的情况下创建组件,在这种情况下,您将负责管理组件的生命周期。
发布于 2009-01-23 21:29:27
所有的TComponent后代都需要所有者,它是在TComponent构造函数中定义的。所有者组件负责销毁所有拥有的组件。
如果你想控制生命周期,你可以传入nil作为参数。
发布于 2009-01-23 22:02:55
只是为了增加一些额外的信息。
每个控件也有一个父级。(一个TWinControl)。在所有者负责生命周期的情况下,父级负责显示对象。
例如,一个窗体有一个面板,而面板有一个按钮。在这种情况下,窗体拥有面板和按钮。但是窗体是面板的父级,而面板是按钮的父级。
https://stackoverflow.com/questions/474448
复制相似问题