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;
这个特性本人很不喜欢
同上。。。
苹果的ARC概念比较好,编译前自动加入释放语句。基本还是代码级别的,不是编译器级别,这样更干净。