myForm := TForm.Create(nil);

myForm := TForm.Create(self);

myForm := TForm.Create(Application);有什么不同?

解决方案 »

  1.   

    nil就是没有
    self就是自己,也就是代码所在的类的实例
    application就是应用程序。
      

  2.   

    procedure TA.xxx(Sender: TObject);
    var
      b:TB;
    begin
      b:=TB.create(nil);//自己創建,自己釋放
      b:=TB.create(self);//A創建,A釋放
      b:=TB.create(application);//應用程序創建,應用程序釋放
    end;可以看看 owner屬性
      

  3.   

    同意dqzhz(多情种子)的解释
    对于TComponent的子类,它的create带有一个参数owner(也由TComponent派生).
    owner负责管理和释放create的控件.
    具体地说:
    当owner被释放了,他所own的控件也即被释放.
    owner负责装载和保存他own的控件的published的属性.
    一个控件的owner是由传给构造函数的参数决定的.被我们拖拽到form上的控件(button,label etc.)它的owner自动设定为form.
    (后边的注意没翻:P)
      

  4.   

    看下Form單元中的TForm.Create代碼不就知道帶這個參數是進去幹嘛的嗎?
      

  5.   

    nil的话要自己释放,如果application,可以让application自动帮你释放,如果是self,而self比如是form1,而form1又是由application建立的,也可以自动释放
      

  6.   

    ilikeff8(迷茫):
    owner的任务不光是释放,正如我先前说的,他还负责存储own的控件的published成员etc.
      

  7.   

    http://expert.csdn.net/Expert/topic/2452/2452827.xml?temp=.9868128这里很清楚了。另外,具体请看《delphi技术手册》英文名《delphi in nutshell》
      

  8.   

    reallike(不得不补习离散……)说的不错