博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对象释放三种方法对比:Free --> FreeAndNil() --> DisposeOf()
阅读量:6531 次
发布时间:2019-06-24

本文共 994 字,大约阅读时间需要 3 分钟。

free:静态方法

测试对象是否为nil, 不为nil则调用destroy。下面是free的Delphi代码:

procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;

一静一动,取长补短,岂不妙哉!

但是调用对象的Destroy只是把对象销毁了,但并没有把对象的引用设为nil,这需要程序员来完成,不过自从Delphi5之后,在sysUtils单元中提供了一个freeAndNil。

freeAndNil:一个独立的函数,不属于任何对象,非对象方法,非类方法。
procedure FreeAndNil(var Obj);
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;

可以看到,FreeAndNil 内部也是调用了 Free() 方法来完成释放对象的。当然,比 Free 多了一些 nil 操作。

所以,建议大家用它代替free/Destroy,以便确保正确地释放对象。

 

DisposeOf:对象方法

 

(对于现代化的 Delphi),对象释放,除了 (TObject.)Free 和 FreeAndNil() 这两种之外,

还有一种方式:DisposeOf 。
这种方式,以后要取代使用 FreeAndNil(). 这是 Delphi 官方内部的开发人员建议使用的。
好处是:
DisposeOf() 支持全平台的正常释放,包括Windows、Linux、MacOS、Android、IOS。
万一以后,自己开发的程序想要跨平台,如果使用的不是 DisposeOf,就必须手动
更改 FreeAndNil() 为 DisposeOf,为了避免这个麻烦,干错一次性做到位。

以后,就在现代化的 Delphi 中使用 DisposeOf 吧。

ps:准确来讲,这个跟 ARC 有关系(Android、IOS)。。。
url:参考这个网址(https://community.embarcadero.com/blogs/entry/lockless-multi-threading-in-delphi)

 

转载于:https://www.cnblogs.com/BSor/p/9370881.html

你可能感兴趣的文章
网页设计排版中哪些元素最重要?
查看>>
配置Tomcat6.0解决下载文件名乱码
查看>>
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
查看>>
PairOfDice示例
查看>>
Myisamchk小工具使用手册
查看>>
Android提取安装的apk文件
查看>>
修改Exchange2013密码修改页面
查看>>
Android资源和R.java文件详解《一》
查看>>
使用友盟集成第三方分享和登陆支付
查看>>
BeanShell中switch语句
查看>>
windows系统提权基础小命令总结
查看>>
李国庆说的有点道理 京东明年Q1上市是个好时机
查看>>
DNS域名解析服务之BIND服务
查看>>
我的友情链接
查看>>
在广州的犄角旮旯里,寻找老字号的独特味道
查看>>
Linux权限管理(基本权限、默认权限)
查看>>
我的友情链接
查看>>
LVM管理 - PV,VG以及LV
查看>>
Maven生命周期详解
查看>>
python导入mysql
查看>>