Это зависит. Free
при заполнении формы не вызывают обработчики событий, которые Release
делает, и любые сообщения, которые могли быть отправлены в форму и помещены в очередь, не будут обрабатываться. Поэтому, хотя во многих и, возможно, в большинстве случаев вызов Free
(или FreeAndNil
) будет работать нормально, это может привести к очень странному поведению по казалось бы случайным причинам.
Альтернативой, которую я бы предложил, является событие OnClose, устанавливающее для Action значение caFree, например:
procedure FormClose(Sender : TObject; Action : TCloseAction)
begin
Action := caFree;
end;
Затем вы можете написать код так:
TMyForm.Create(nil).ShowModal;
И вам не нужно специально освобождать форму, так как она освободится сама по себе.