一些理论问题 1、什么情况下需要人为销毁对象?像TList TStringList之类的Create之后,还用FreeAndNil(xx)销毁吗?2、自定义的类如果只是一些简单的逻辑还用销毁吗?3、窗体创建后,CLOSE了,就可以了?还用销毁吗?否则它还是存在的吧?4、大家在项目中,有没有把逻辑层和视图层分开?是分了几层? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Tlist Tstringlist 要人为销毁 自己创建的对象,得自己销毁,用Delphi组件创建的对象,不用管,Delphi负责销毁。窗体创建后,CLOSE了,就不用销毁了。 不管怎么样的情况 AObject := TWhat.Create; try //To do ... finally FreeAndNil(AObject); end;只要是自己create的对象,都要自己释放 2、自定义的类如果只是一些简单的逻辑还用销毁吗?在创建完成后,都得释放,无论他是否简单。3、窗体创建后,CLOSE了,就可以了?还用销毁吗?否则它还是存在的吧?Form Close后,除主表单外(因为这个Close)程序就退了,如果Close之后,该Form对象不再使用时,就得释放比如:procedure OpenLog;var Form2 : TForm2;begin Form2 := TForm2.Create(NIL); Form2.ShowModule; Form2.Freeend;当然,如果Form.OnClose里给出了释放属性(caFree),那么Close之后就自动释放了,就不需要再Form2.Free了,如:procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);begin Action := caFree;end;因此各种情况还是不一样的,有变数 更正一下Form2.ShowModal; FreeAndNil(Form2); 相当于 Form2.Free; Form2 := NIL; 因此不是每个地方都得用这个来释放,多数情况下直接 Obj.Free; 即可 一般自定义的类要创建后要自行释放.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; 有手动 create, 都要有对应的手动 free. UrlDownloadToFile能否知道下载文件的扩展名 stringgrid问题 怎样连接使用了带特殊符号密码的ACCESS数据库?? 使用ocx控件的问题 给大家看个小说 Delphi调用C++动态库问题,虽然老话重谈,但是我参考以前的贴子,没有找到解决办法!急!!! 谁能告诉我udp是什么东西啊 sql server2000 numeric字段自动进位 请教一个 MDI 的问题 请问用delphi怎样来控制制指纹仪 关于adoquery链接数据库以后数据读存的问题 问几个DElphi的问题,看多少人知道
try
//To do ...
finally
FreeAndNil(AObject);
end;只要是自己create的对象,都要自己释放
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;因此各种情况还是不一样的,有变数
Form2.ShowModal; FreeAndNil(Form2);
相当于
Form2.Free;
Form2 := NIL;
因此不是每个地方都得用这个来释放,多数情况下直接
Obj.Free;
即可
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;