1、什么情况下需要人为销毁对象?像TList TStringList之类的Create之后,还用FreeAndNil(xx)销毁吗?2、自定义的类如果只是一些简单的逻辑还用销毁吗?3、窗体创建后,CLOSE了,就可以了?还用销毁吗?否则它还是存在的吧?4、大家在项目中,有没有把逻辑层和视图层分开?是分了几层?

解决方案 »

  1.   

    Tlist Tstringlist 要人为销毁 
      

  2.   

    自己创建的对象,得自己销毁,用Delphi组件创建的对象,不用管,Delphi负责销毁。窗体创建后,CLOSE了,就不用销毁了。
      

  3.   

    不管怎么样的情况  AObject := TWhat.Create;
      try
        //To do ...
      finally
        FreeAndNil(AObject);
      end;只要是自己create的对象,都要自己释放
      

  4.   

    2、自定义的类如果只是一些简单的逻辑还用销毁吗?在创建完成后,都得释放,无论他是否简单。3、窗体创建后,CLOSE了,就可以了?还用销毁吗?否则它还是存在的吧?
    Form Close后,除主表单外(因为这个Close)程序就退了,
    如果Close之后,该Form对象不再使用时,就得释放
    比如:procedure OpenLog;
    var
      Form2 : TForm2;
    begin
      Form2 := TForm2.Create(NIL);
      Form2.ShowModule;
      Form2.Free
    end;当然,如果Form.OnClose里给出了释放属性(caFree),那么Close之后就自动释放了,就不需要再Form2.Free了,
    如:
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;因此各种情况还是不一样的,有变数
      

  5.   

    更正一下
    Form2.ShowModal;  FreeAndNil(Form2);
      相当于
      Form2.Free;
      Form2 := NIL;
      因此不是每个地方都得用这个来释放,多数情况下直接
      Obj.Free;
      即可
      

  6.   

    一般自定义的类要创建后要自行释放.
    var
      myObj: TMyClass;procedure TForm1.Create(Sender: TObject);
    begin
      myObj := TMyClass.Create; // 创建窗体时创建
    end;procedure TForm1.Destroy(Sender: TObject);
    begin
      if Assigned(myObj) then
        FreeAndNil(myObj);  // 最后释放
    end;
      

  7.   

    有手动 create, 都要有对应的手动 free.