16

我有一个表格,我用它来显示一些信息几秒钟。表格可以自行释放吗?我可以在构造函数中启动一个计时器,然后在计时器事件中调用 self.free 吗?或者这可能会导致麻烦?

4

4 回答 4

31

此外,您可以使用表格调用Release.

它向表单发送 CM_RELEASE 消息。作为一种反应,它称为免费。释放的优点是没有任何可能导致崩溃的消息留给表单。

于 2009-04-02T09:16:24.887 回答
18

您可以使表单在用户或代码关闭时自行释放:

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;

确保在构造函数中提供所有者,以防应用程序关闭并且表单当时没有被破坏。所有者将在释放自身之前释放表单。

于 2009-04-02T09:03:28.303 回答
1

我有一整套可以释放自己的对象,并且我已经对它们进行了各种测试,没有显示任何问题/泄漏。TForm 可能更复杂,但只要 Self.Free() 是最后一次调用,你应该是安全的。

(对于那些想知道为什么我有释放自己的对象的人;我经常在系统中传递它们,所以我通过自己的引用计数方案来实现。当最后一个引用被释放时,对象就会释放自己)。

于 2009-04-02T08:54:08.497 回答
0

这正是接口所做的。

于 2009-04-02T09:28:58.693 回答