TXXX.Create(application)和TXXX.Create(nil)应使用哪个?(100分)

  • 主题发起人 主题发起人 antee
  • 开始时间 开始时间
A

antee

Unregistered / Unconfirmed
GUEST, unregistred user!
请问有何区别,应使用哪一种较好。
比如TForm.Create(Application)
 
同样,
如果想把窗体建立在某些构件的也可以。
Form1 :=Tform1.Create(Panel);
 
你说呢?有些地方必须用TForm.Create(Application);
如果用Application的话,当Application结束时,TForm会被自动Free掉;
而用Self,nil呢?当然要自己解决啦。在Form.OnClose 里自己释放就行了。
 
只是在内存管理上的区别,似乎nil需要手动释放,而Application不需要。
你试一下吧!
 
我只知道二点区别,就是用
with TXXX.Create(application) do
begin
//
end;
这种结构时,当你改变TXXX的名称的时候,改动会秀小,而如果用
XXX:=TXXX.Create(Application) ;
with xxx do
begin
//
end;
的时候,你要改动的地方就多一点

另外,如果你用XXX:=TXXX.Create(nil);
时,如果你的窗体是模式调用还好,直接Free掉就可以,
不然就是的XXX的OnDestry事件里调写XXX:=nil;
 
用Application作参数的话,在Application被Free时会先Free掉XXX
但用Nil的话就不会,不过Application被Free,程序也就退出了,所以XXX还是会被Free,
只是在Application之后,如果XXX的析构中做了什么事,可能就会出错了,
除非你在Application被Free之前把XXX给Free掉。
 
多人接受答案了。
 
后退
顶部