Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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

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