Delphi: Это нормально для формы, чтобы освободить себя?

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

4 ответа

Решение

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

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

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

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() является последним выполненным вызовом, вы должны быть в безопасности.

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

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

Другие вопросы по тегам