У меня есть форма, которую я использую для отображения некоторой информации в течение нескольких секунд. Хорошо ли форма освободиться? Могу ли я запустить таймер в конструкторе, а затем вызвать self.free в событии таймера? Или это потенциально может привести к неприятностям?
Дельфи: Это нормально для формы, чтобы освободить ее?
Ответ 1
Кроме того, с формой вы можете вызвать выпуск.
Он отправляет сообщение CM_RELEASE в форму. В качестве реакции он называет Free. Преимущество выпуска заключается в том, что для формы нет сообщений, которые могут привести к сбою.
Ответ 2
Вы можете сделать форму свободной, когда она закрывается пользователем или из кода:
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;
Убедитесь, что вы предоставили владельцу конструктора возможность отключить приложение и форма не была уничтожена в то время. Владелец освободит форму до освобождения себя.
Ответ 3
У меня есть целый набор объектов, которые освобождают себя, и я провел различные тесты на них без каких-либо проблем/утечек. TForm может быть более сложным, но до тех пор, пока Self.Free() будет последним сделанным вызовом, вы должны быть в безопасности.
(Для тех, кто задается вопросом, почему у меня есть объект, который освобождает себя, я передаю их вокруг системы, поэтому я реализовал свою собственную схему подсчета ссылок. Когда последняя ссылка освобождена, поэтому объект освобождается).
Ответ 4
Это именно то, что делается с интерфейсами.