EPr*_*und 5 delphi user-interface vcl
目前,我正在尝试了解Delphi的VCL,特别是通知机制(在我看来这是一个很棒的机制)。
当我学习这个主题时,我想起了TLabeledEdit,当然我已经使用它很长时间了,但我从来没有机会停下来研究它的代码。
据我所知到目前为止:
当 TComponent 被销毁时:
csDestroying在其状态中。FreeNotifiers部分。我无法理解。components列表并且:
components从列表中删除每个项目当子组件被销毁时,它会为其所有子组件重新启动相同的进程。所以,据我所知,这是一个连锁效应。
我不明白的是FreeNotification,我能用它做什么?
让我们TLabeledEdit首先考虑一下。通知的相关部分,在TLabeledEdit的代码中是对函数的重写Notification,代码如下:
if (AComponent = FEditLabel) and (Operation = opRemove) then
FEditLabel := nil;
Run Code Online (Sandbox Code Playgroud)
FreeNotification如果不使用会发生什么?
一般来说,由于这种机制我会得到什么好处,以及我没有看到什么最终可能使它的存在变得必要?
该FreeNotification机制的作用是通知已注册的组件该组件正在被释放。 然后,他们使用他们的Notification方法来确保他们不持有任何对它的引用(这就是你的示例正在做的),这样他们就不会最终得到对无效对象的悬空引用。