TForm1.Create(nil)和TForm1.Create(Self)有什么區別(50分)

  • 主题发起人 主题发起人 出现派
  • 开始时间 开始时间

出现派

Unregistered / Unconfirmed
GUEST, unregistred user!
他們有什么不同之處和相同之處,在什么情況下用TForm1.Create(nil),而又在什么情況下用TForm1.Create(Self)(對別的組件是否也同樣適用)
請高手賜教,謝謝
 
TForm1.Create(nil), 不会释放资源
TForm1.Create(Self) 当self destory 时候 Tfrom1 会随之释放
 
只是指定不同的"拥有者" owner.
基本上没有严格的区分,在什么情况下用那个.

总之, create之后记得free就行了.
 
没有任何区别,你可以看VCL,TFrom最终继承的是TComponent,
可以看到TComponent的Create,和Destory。发现。
constructor TComponent.Create(AOwner: TComponent);
begin
FComponentStyle := [csInheritable];
if AOwner <> nil then AOwner.InsertComponent(Self);
end;
如果是Nil的时候,没有写任何代码,如果是Self的话,TComponet就记录了一个组件。并且能够自动析构。
if FOwner <> nil then FOwner.RemoveComponent(Self);
inherited Destroy;
事实上,Delphi的如果是NIL,DELPHI也会自动回收这些垃圾的。。。
 
nil 是noparent,得自己释放,
self 是parent,self释放就吧form释放了.
 
学习一下
 
加Self表示組件創建後會加入Delphi管理的組件列表,並通知所有組件有組件加入或改變。
再Destroy時Delphi會查找對象的子構件並自動刪除。所以加了Self就不需要顯示的刪除。但會有效率的損失(創建),如果為nil就需要手動刪除了,但創建速度要快一些,但這是其它組件就得不到NotifyEvent了,包括創建和刪除等。
 
謝謝,非常感謝
封貼
 
后退
顶部