zoukankan      html  css  js  c++  java
  • 对象释放三种方法对比:Free --> FreeAndNil() --> DisposeOf()

    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)

  • 相关阅读:
    小明铺路
    Python库-BeautifulSoup
    Python库-re(正则表达式)
    cpp分解质因数
    cf Double Happiness(判断是否为素数且为4k+1型)
    ACM-世界岛旅行
    C#(.Net)中调用Sql sever汉字字符串显示为?问号
    如何配置Python环境
    记账软件——第三天
    记账软件——第二天
  • 原文地址:https://www.cnblogs.com/BSor/p/9370881.html
Copyright © 2011-2022 走看看