请问用application创建的窗体,要不要手动释放(5分)

  • 主题发起人 主题发起人 蓝电风暴
  • 开始时间 开始时间

蓝电风暴

Unregistered / Unconfirmed
GUEST, unregistred user!
问题是不是很弱智啊?
 
不需要,除非自己建立的。
 
当然要手动释放,delphi还没有智能到帮你自动释放内存的地步。
 
应该是不用手动释放吧,在程序的主Unit里只有
Application.CreateForm(TfrmMain, frmMain);
看不见释放frmMain的代码,所以应该是在程序终止时由Application对象负责释放的。
 
要。
TRY
TFORM1:=APPLICATION.CREATE(SELF);
FINALLY
FORM1.FREE;

END;
 
application.createform()建立的不需要手动释放
如果是tform.create(self)就需要手动释放
 
想不到很多人对此都不太清楚啊,希望哪位大侠能给出一个明确而令人信服的答案
 
我不很懂
但肯定是不用的
除非是自己建的类
你的关闭动作其实就会释放掉的
 
nil,Self,Application分別有如下意義:
nil:自己負責釋放.
Self:由該對像所在窗體釋放(一般情況);
Application:由該進程負責釋放.


 
同意hongxing_dl:
application.createform()建立的不需要手动释放
如果是tform.create(self)就需要手动释放
 
我的意見:
要不要釋放這句話,還得看你怎麼理解,如果理解為在程序關閉時,系統是不是釋放系統資源的話,系統自動建立的和TFrom.Create(Self)的都是不需要手動釋放的,程序關閉時都會釋放資源,唯有TFrom.Create(nil)的時候才要手動釋放!

原理:TComponent都有一個Owner屬性,TForm也一樣有,而在建立窗體時就需要指定owner,
如TForm.Create(self),其中Self就是Owner,而Self本身就是指向你建立窗體的那個類,只要系統關閉,還是會被釋放的.
而你用TFrom.Create(nil)建立的窗體,就沒有Owner(nil),所以你必須手動釋放!

但是奉勸大家,除了主窗口,不要自動建立,而且不用的窗口就關閉!養成好習慣!

希望對你能有用!
 
要不要释放,什么时候释放要看你的需要了,看
constructor Tform.Create(AOwner: TComponent);
AOwner这个东西就是一个组件的拥有者,就是负责释放组件的,
form1;=tform1.create(nil);//form1的拥有者为nil,也就是没有谁拥有它,也没有谁来释放它,就要我们手工释放。
form1;=tform1.create(self);//form1的拥有者为当前的窗体或组件。
由窗体还组件来释放from1,也就是当self进行destory时才能释放form1
form1;=tform1.create(application);)//form1的拥有者为当前的应用程序。当应用程序终止里应用程序会释放它的所有组件

 
谢谢各位!
提出这么弱智的问题,原因在于我忘了TComponent由AOwner来释放,感谢各位的提醒,特别是rogue_xu和chengshazi。
此问题就此了结。
 
后退
顶部