7.2.1 释放对象
在使用对象引用模型的语言中,您需要一种方法在使用对象之前创建该对象,同时还需要一种方法在不再需要该对象时释放其占用的内存。如果不对其进行清理,就会导致不再需要的对象占满内存,造成内存泄漏问题。为了解决这个问题,C# 和 Java 等基于虚拟执行环境(或虚拟机)的语言都采用了垃圾回收机制。虽然这让开发人员变得更轻松,但这种方法却受到一些复杂的性能问题的制约,而这些问题在解释 Object Pascal 时其实并不重要。因此,尽管这些问题很有趣,但我不想在此深入探讨。
在 Object Pascal 中,一般通过调用对象特殊的 Free 方法(同样是 TObject 的方法,在每个类中都可用)来释放对象的内存。在调用对象的析构函数(可能有特殊的清理代码)后,Free 会将对象从内存中删除。因此,您可以将上面的代码片段补充为:
var
ADay: TDate;
begin
// 创建
ADay := TDate.Create;
// 使用(略)
// 释放内存
ADay.Free;
end;
虽然这是标准的做法,但组件库还增加了像对象所有权这样的概念,大大减少了手动内存管理的影响,使这一问题的处理相对简单。使这个问题的处理相对简单。
注解: 稍后我们将看到,当使用接口引用对象时,编译器采用了一种自动引用计数(ARC)内存管理形式。几年来,Delphi 移动编译器中的常规类类型变量也采用了这种方式。从 10.4 版(也称为 Sydney 版)开始,内存管理模型得到了统一,所有目标平台都采用了经典的桌面 Delphi 内存管理。
需要了解的内存管理知识还有很多;但鉴于这是一个相当重要的主题,而且并不简单,我决定在这里只提供简短的介绍,并用一整章(即第 13 章)专门讨论这一主题。在这一章中,我将向你详细介绍你可以使用的不同技巧。