Create(AOwner: TComponent)的困惑 ( 积分: 50 )

  • 主题发起人 willing66
  • 开始时间
W

willing66

Unregistered / Unconfirmed
GUEST, unregistred user!
Create(AOwner: TComponent)的困惑
请教大家一下,
create(self)、create(nil)、create(application)的区别,如果是动态创建的对象用了create(self)我程序又用了freeAndNil()会不会有问题。
 
A

ANiDelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
一般来说Creater(AOwner)说明生成的控件将由AOwner负责Free,如果AOwner=nil,即create(nil)就应该自己在程序中手动Free
当Create(Self)时,就会在Self.Components中加入创建的控件,这个表就是Self负责Free的一个表了。当创建的控件自行Free,如Btn.Free或FreeAndNil(Btn)时,其Owner(如Self)就会收到一个消息,从而从其Components列表移除相应的控件。所以自己Free掉控件也不会出问题。
 
D

duhai_lee

Unregistered / Unconfirmed
GUEST, unregistred user!
Self作为AOwner是由Self(当前对象)来控制它的生命周期。可以不用去释放,但是知道Self释放时,才释放当前该对象。
application作为AOwner是由Application来管理它的生命周期,也可以不用去释放,但是直到Application释放时才释放该对象。
nil作为AOnwer,就是没人管的对象了,那么你必须亲自去释放它。否则就是泄漏。
以上三种若都FreeAndNil或者Free他们都没有任何问题。
我一般习惯于用nil来创建自定义的组件或者对象,并且由我来管理他们的生命周期, 用完就释放,遵循一个良好的规则,就是谁创建谁释放。
没有垃圾回收机制的语言就得这样。
 
S

sunnyfairy

Unregistered / Unconfirmed
GUEST, unregistred user!
都说得很清楚了,我也习惯用nil来创建对象,因为这样比较速度比较快,如果写Self或者别的,则要调用InsertComponents和RemoveComponents(大概是这两个过程吧,记得不清楚了),这两个过得相当费时。
 
Q

qi_jianzhou

Unregistered / Unconfirmed
GUEST, unregistred user!
他们都说了,我就不说了
 

就此开始

Unregistered / Unconfirmed
GUEST, unregistred user!
建议去看看关于OO的书
 
W

willing66

Unregistered / Unconfirmed
GUEST, unregistred user!
有没有什么好的OOP的书介绍一下,我想找一两本来认真看一下。对这方面了解确定太少了。谢谢大家的讲解。
 
Q

qi_jianzhou

Unregistered / Unconfirmed
GUEST, unregistred user!
看看刘艺的吧, delphi 面向对象开发
好像 delphi 只有这一本是关于面向对象的书
 
W

willing66

Unregistered / Unconfirmed
GUEST, unregistred user!
不知道哪里有下载.
 
D

duhai_lee

Unregistered / Unconfirmed
GUEST, unregistred user!
看李维的 Inside vcl
 
J

jn_betterfly

Unregistered / Unconfirmed
GUEST, unregistred user!
duhai_lee解释的很清楚了,我也赞成看看刘艺的那本oo,很好理解的
 
W

willing66

Unregistered / Unconfirmed
GUEST, unregistred user!
感谢在的帮助。
我现在正在看刘艺的OOP。
 

Similar threads

S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
523
import
I
I
回复
0
查看
679
import
I
顶部