2009-01-12 12:41 LP
万老师: 你好! 麻烦你能不能讲一下MyForm1 := TMyForm.Create(nil); Create参数为:nil/self/application的区别,最好能看到实际效果的区别 谢谢
@LP 例如: My := TMy.Create(X); 其中的 X 将会成为控件 My 的 Owner 属性, 可能会不只一个控件把 X 当作 Owner. 当 X 释放时, 它会同时释放那些把它当作 Owner 的所有控件. 譬如: btn1 := TButton.Create(Panel1); btn2 := TButton.Create(Panel1); btn3 := TButton.Create(Panel1); 当 Panel1.Free 时, btn1、btn2、btn3 都会同时释放. 如果 btn1 := TButton.Create(Self); {譬如 Self 是窗体} 那么窗体释放时, btn1 也会同时释放. btn1 := TButton.Create(Application); 当程序销毁时也会同时释放 btn1. 这对单窗体程序来讲基本没有区别, 但如果是多窗体就不一样了. 如果 btn1 := TButton.Create(nil); 那么 btn1 得自己负责手动释放(btn1.Free). 你也许会问: 假如 btn1 所在的窗体都销毁了, btn1 还会存在吗? 答: 如果 Application 还在 btn1 不会消失(在 Create(nil) 的情况下). 一般情况下, 当 Application 不在了, 系统会释放它所包含的控件. 但等系统来做这件事不是个好习惯, 因为有例外(一般是在跨进程的时候), 有这样一句话: 一个对象分配的内存可能会比对象本身存在的时间长.