我有一个表单,用于显示一些信息几秒钟。表单自己释放是否可以?我能在构造函数中启动一个计时器,然后在计时器事件中调用self.free吗?这样做会不会潜在地导致问题?
此外,你可以使用表单调用 Release
。
它会向表单发送一个 CM_RELEASE 消息。随着反应,它会调用 Free。 释放的优点在于,不会留下可能导致崩溃的表单消息。
Close
将根据您设置的关闭操作来关闭表单,但我说的是其他事情:(如果设置为caFree).Close
与.Release
一样安全。我的意思是它不会像.Free
那样创建问题。 - Gabriel您可以使表单在被用户或代码关闭时自动释放:
procedure TForm27.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm27.FormCreate(Sender: TObject);
begin
Timer1.Enabled := True;
end;
procedure TForm27.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
Close;
end;
构造函数中一定要提供一个所有者,以防应用程序关闭时窗体尚未被销毁。所有者将在释放自身之前先释放窗体。
我有一整套自我释放的对象,我已经运行了各种测试,并没有显示任何问题/泄漏。一个TForm可能更复杂,但只要Self.Free()是最后一次调用,你就应该是安全的。
(对于那些想知道为什么我有自我释放的对象的人; 我经常在系统中传递它们,所以我实现了自己的引用计数方案。当最后一个引用被释放时,对象就会自我释放)。
这正是接口所做的。