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