当前位置:  开发笔记 > 程序员 > 正文

Form.Release + NIL

如何解决《Form.Release+NIL》经验,为你挑选了2个好方法。

如果在使用表单后调用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.

做这个的最好方式是什么?



1> 小智..:

放线

  Form1 := nil;  

就在发布电话之后.

Release只是将一个CM_RELEASE消息发布到Form,它允许Form在处理CM_RELEASE消息之前完成其队列中的内容(事件处理程序),这通常只是调用Free.
因此,在调用Release之后,您不应该假设Form变量仍指向有效的Form,因此将nil放入变量中.



2> François..:

发布只是(可能)推迟免费.调用Release后你应该做的第一件事就是修改变量.
然后,即使某些代码在实际销毁之前尝试引用Form1,您也会安全.在您的代码中的情况下,它将安全地为新用法重新创建另一个Form1,而不会打扰被销毁的那个.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有