Delphi XE5的移动项目中对象已经是生存期自管理的了

Delphi XE5的移动项目中对象已经是生存期自管理的了
TTest = class
protected
destructor Destroy; override;

public
procedure BeforeDestruction; override;

end;

procedure TTest.BeforeDestruction;
begin
inherited;
ShowMessage(‘TTest.BeforeDestruction’);
end;

destructor TTest.Destroy;
begin
ShowMessage(‘TTest.Destroy’);
inherited Destroy;
end;

测试
procedure TForm5.Button1Click(Sender: TObject);
var
p: TObject;
begin
p := TTest.Create;

end;
然后发现析构函数会自动被调用到.

但是如果你想一套代码Windows,Android,iOS等各个平台都能用,最好在开发的时候加上手工的Free.
也就是说生存期自管理的时候Free函数实际上是空的,什么都没做.而在Windows平台兼容旧的代码必须Free,否则会有内存泄露.
procedure TObject.Free;
begin
// under ARC, this method isn’t actually called since the compiler translates
// the call to be a mere nil assignment to the instance variable, which then calls _InstClear
{$IFNDEF AUTOREFCOUNT}
if Self <> nil then
Destroy;
{$ENDIF}
end;

此条目发表在Delphi, 未分类分类目录。将固定链接加入收藏夹。

Delphi XE5的移动项目中对象已经是生存期自管理的了》有 3 条评论

  1. siow说:

    这个特性本人很不喜欢

  2. wujingping说:

    苹果的ARC概念比较好,编译前自动加入释放语句。基本还是代码级别的,不是编译器级别,这样更干净。

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

你必须启用JavaScript