如果在使用表单后调用 Form.Release,它将释放所有相关内存,但不会将表单变量设置为 nil。
if not assigned (Form1) then
begin
Application.CreateForm(Tform1, Form1);
try
// Do something
finally
Form1.Release
end;
end;
为了能够再次调用相同的代码,Form1 必须在某个时刻设置为 nil。从发布的描述来看我不能做
Form1 := nil;
就在Release 之后,因为Release 过程将在调用之后、窗体实际释放之前直接返回。我无法检测 Form.Release 何时完成以将表单 var 设置为 nil。
做这个的最好方式是什么?
把线
Form1 := nil;
就在调用 Release 之后。
Release 只是将 CM_RELEASE 消息发布到 Form,这允许 Form 在处理 CM_RELEASE 消息之前完成其队列(事件处理程序)中的内容,这意味着通常只调用 Free。
因此,在调用 Release 之后,您不应该假设 Form 变量仍然指向有效的 Form,从而将 nil 放入该变量中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)