Delphi: Это нормально для формы, чтобы освободить себя? - PullRequest
13 голосов
/ 02 апреля 2009

У меня есть форма, которую я использую, чтобы показать некоторую информацию за несколько секунд. Это нормально для формы, чтобы освободить себя? Могу ли я запустить таймер в конструкторе, а затем вызвать self.free в таймере-событии? Или это может привести к неприятностям?

Ответы [ 4 ]

30 голосов
/ 02 апреля 2009

Кроме того, с помощью формы можно позвонить Release.

Отправляет сообщение CM_RELEASE в форму. В качестве реакции он называет Free. Преимущество релиза в том, что для формы не осталось сообщений, которые могут привести к сбою.

17 голосов
/ 02 апреля 2009

Вы можете сделать форму свободной, когда она закрывается пользователем или из кода:

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;

Убедитесь, что вы указали владельца в конструкторе, в случае закрытия приложения, и форма не будет уничтожена в то время. Владелец освободит форму, прежде чем освободить себя.

1 голос
/ 02 апреля 2009

У меня есть целый набор объектов, которые освобождают себя, и я провел различные тесты на них без каких-либо проблем / утечек. TForm может быть более сложным, но пока Self.Free () - последний сделанный вызов, вы должны быть в безопасности.

(Для тех, кто интересуется, почему у меня есть объект, который освобождает себя; я много раз обхожу их вокруг системы, поэтому я реализовал собственную схему подсчета ссылок. Когда последняя ссылка освобождается, объект освобождается).

0 голосов
/ 02 апреля 2009

Это именно то, что делается с интерфейсами.

...