form1.Release;与form1.free;有什么区别啊
tform1.Create(nil);与tform1.Create(self);与tform1.Create(application);有什么区别

解决方案 »

  1.   

    来就送???我来了。.送吧.
    Form1.Release;?????我在很不知道..应该是调用了Form1.Free;帮助里应该有.你自己先看看.
    tform1.Create(nil);//Tform1自己完成创建工作;
    tform1.Create(self);//由当前窗体 负责创建Form1;如果你在Form2中写的代码,那么这个
                        //self.就是Form2;
    tform1.Create(application);// 记不太清..应该就是主窗体的Handle;
      

  2.   

    同意2楼说法
    Tform1.Create(Application);是由Project->Option里你设置的主窗体作为父级
      

  3.   

    至于Tform.Free 和Release 的区别你看一下也就明白咯~
    procedure TCustomForm.Release;
    begin
      PostMessage(Handle, CM_RELEASE, 0, 0);
    end;procedure TObject.Free;
    begin
      if Self <> nil then
        Destroy;
    end;
      

  4.   

    Release returns immediately to the caller. It does not wait for the form to be freed before returning.
      

  5.   

    网很慢一下子发太多总出错
    不过还要补充一下呵呵
    如果用tform1.Create(nil);建立的窗体必须用
    Tform1.Free;不然他没有父级控件是不能被自动从内存中删除滴.
      

  6.   

    tform.create(nil)它的属主窗口为空,必须手动释放;
    tform.create(self)它的属主窗口为form本生,可以不必手动释放,在form关闭时,自动释放;
    tform.create(application)表示form由应用程序创建,因此当应用程序关闭时,form才释放。
      

  7.   

    TCustomForm.Create(AOwner: TComponent);
    一般有AOwner 的 代表所有者,就是负责释放该资源的东东
    Form:=TForm1.Create(nil);
    如果 是nil,那么就是说由程序员负责释放
    其它的Self,application 都是由程序释放,self代表当前类的引用
    释放的时间不相同,是self,那么当前self释放的时候,Form会被self先释放
    是application  ,程序结束时释放Form

    constructor TCustomForm.Create(AOwner: TComponent);
    begin
      Form:=TForm1.Create(self); //此时self 就 代表 对TCustomForm类实例的引用
    end;
    转贴:http://www.delphibbs.com/keylife/iblog_show.asp?xid=2385
    KeyLife富翁笔记  
    作者: majorsoft
    标题: destroy, free, freeAndNil, release用法和区别 
    关键字: 销毁对象,free,release,destory 
    分类: 开发经验 
    密级: 公开 
    (评分: , 回复: 0, 阅读: 196) &raquo;&raquo; 
    destroy, free, freeAndNil, release用法和区别
      1)destroy:虚方法
     释放内存,在Tobject中声明为virtual,通常是在其子类中override 它,且要加上inherited关键字,才能保证派生类对象正确地被销毁;
    但destroy一般不能直接用,为什么?
    假如当一个对象为nil,我们仍然调用destroy,此时会产生错误。因为destroy是虚方法,它要根据对象中的头四个字节找到虚拟方法表Vmt的入口地址,从而找到destroy的入口地址,所以此时对象一定要存在。但free就是静态方法,它只需根据对象引用/指针的类型来确定,即使对象本身不存在也没问题,而且在free中有判断对象是否存在的操作, 所以用free比用destroy安全。
    2)free:静态方法
    测试对象是否为nil, 非nil则调用destroy。下面是free的Delphi代码:
    procedure TObject.Free;
     begin
       if Self <> nil then
         Destroy;
      end;
     一静一动,取长补短,岂不妙哉!
    但是调用对象的Destroy只是把对象销毁了,但并没有把对象的引用设为nil,这需要程序员来完成,不过自从Delphi5之后,在sysUtils单元中提供了一个freeAndNil。
     3)freeAndNil;一般方法,非对象方法,非类方法。
    procedure FreeAndNil(var Obj);
    var
      Temp: TObject;
    begin
      Temp := TObject(Obj);
      Pointer(Obj) := nil;
      Temp.Free;
    end;
    建议大家用它代替free/Destroy,以便确保正确地释放对象。
    4)release;TcustomForm中定义的静态方法。
    当窗口中所有的事件处理完之后,才调用free函数。常用在销毁窗口,而在这个窗口中事件处理需要一定的时间的时候,用这个方法能确保窗口事件处理完之后才销毁窗口。下面是TCustomForm.Release的Delphi源代码:
    procedure TCustomForm.Release;
    begin
      PostMessage(Handle, CM_RELEASE, 0, 0);
    //向窗口发CM_RELEASE消息到消息队列,当所有的窗口事件消息处理完之后,
    //再调用CM_RELEASE消息处理过程CMRelease 
    end;
    再看看下面CM_RELEASE消息处理过程CMRelease的定义:
    procedure CMRelease(var Message: TMessage); message CM_RELEASE;
    procedure TCustomForm.CMRelease;
    begin
    Free; //最后还是free; 
    end;  
      

  8.   

    如果是MDI子窗体怎么创建?怎么释放?才是最规范的呢?
    try
      childForm.show;
    except
      childForm.Create(application);
    end;//这样创建行么?action:=childForm.close;
    childForm:=nil;
    //这样释放好么?
      

  9.   

    tform1.Create(nil);与tform1.Create(self);与tform1.Create(application);有什么区别
    Create后面的括号表示这个创建对象的宿主,即这个对象由谁来管理释放,
    nil表示不指定它的宿主,它必须要你自己来手动释放(form1.free);
    self表示该对象由程序释放,比如:procedure Tform1.SpeedButton1Click(Sender: TObject);这个触发事件里创建的,那么当该SpeedButton1释放的时候该对象也会自动释放。
    application同上,它也是由程序来控制的, 当应用程序关闭的时候它就自动释放掉了。