`

Delphi中关于资源释放(Free,Relealse,FreeAndNil)

 
阅读更多

根据日常编程经验,得出一些Delphi中关于资源释放的体会。

假如有对象Obj为TObject类型:

1) Obj.Free直接释放资源后,调用OnDestroy事件,但是没有将Obj指针值置为Nil。

2) Obj.Release 等待资源不再使用后释放资源,同样不修改Obj指针为Nil,所以在OnDestroy中最好使用Release进行资源释放操作。

3) 局部变量释放资源时,可以考虑用FreeAndNil()释放资源,这样效率会高些,能提高内存的利用率。

4) 单纯通过Assigned(Obj)判断对象是否已经创建是不够的,因为如果对象通过Free/Release进行资源释放的话,Obj指向的是一个未知地址, 而非Nil,所以需要用(Not Assigned(Obj)) And (Not (Objis TObject)) 来判断该对象是否已经创建在内存中。

分享到:
评论

相关推荐

    DLL封装应用程序的资源-Delphi

    本教程将重点讲解如何在Delphi中将应用程序的资源封装到DLL文件中,以实现更高效、灵活的资源共享。 首先,理解DLL的基本原理至关重要。DLL文件可以视为一种模块,它包含可执行代码和数据,这些代码和数据可以在...

    Delphi开发DLL插件用DLL封装应用程序资源

    例如,当资源被加载到内存后,应使用`FreeMem`或`FreeAndNil`进行释放。 4. **API调用**:Delphi提供了一系列API函数,如`FindResource`、`LoadResource`、`LockResource`和`UnlockResource`,用于在DLL中管理和...

    Delphi颜色填充BMP、ICO等文件..rar

    在Delphi中,使用`Free`或`FreeAndNil`方法可以正确释放对象。 以上就是Delphi中处理BMP和ICO文件的主要知识点,包括颜色填充和图像操作。通过理解和应用这些概念,开发者可以创建各种图像处理功能,如编辑、转换和...

    在delphi 11.3 Form窗体的panel 中嵌入 Fmx窗体

    在Delphi 11.3开发环境中,开发者经常会遇到需要在一个传统的VCL(Visual Component Library)窗体上嵌入FireMonkey (FMX)组件的情况。这通常发生在开发跨平台应用程序时,因为FMX提供了对多操作系统的支持。本知识...

    delphi调用asp.net中的WebService 实例

    通过学习这些资源,你可以亲手实践如何在Delphi中调用ASP.NET的WebService,从而提升你的跨平台开发能力。 总之,Delphi调用ASP.NET WebService是一个涉及到HTTP通信、XML解析和对象代理的过程。理解这个过程对于...

    《Delphi编程技巧集》Delphi编程技巧大全

    在Delphi中,理解何时使用`var`、`const`和`out`参数,以及如何正确使用`Free`和`FreeAndNil`函数,对于防止内存问题至关重要。 此外,Delphi支持数据库应用开发,书中可能讲解了ADO.NET或FireDAC组件的使用,以及...

    delphi 几个定时器方法的比较

    - 在FreeAndNil方法中,确保正确地释放资源,防止内存泄漏。 通过封装多媒体定时器,我们不仅可以得到更精确的定时,还可以通过面向对象的方式更好地管理和复用定时器。 总结,Delphi中的定时器选择应根据具体需求...

    Delphi制作最小化到系统托盘的程序&TForm1.FormDestroy不执行的原因.zip_win10程序窗口最小化不见了

    在Delphi编程中,开发人员有时需要实现一个功能,即当用户点击窗口的最小化按钮时,程序并不真正地最小化...同时,提供的资源链接,如CSDN和网易博客的文章,可以进一步深入学习Delphi中的系统托盘操作和窗体事件处理。

    Delphi系统临时文件操作示例源码..rar

    在Delphi中,通常会使用`FreeAndNil`函数释放`TFileStream`对象。 6. **临时目录**:除了单个临时文件,有时还需要使用临时目录来存储一组相关的文件。`System.IOUtils.TemporaryDirectory`属性可以获取系统默认的...

    delphi学习笔记

    3. FreeAndNil 函数:FreeAndNil 函数用于释放对象,释放控件所占用的内存空间。 七、Delphi 高级主题 1. 事件驱动编程:Delphi 中的事件驱动编程是指根据事件来驱动程序的执行,例如按钮的单击事件、文本框的变化...

    DELPHI音频播放音量调节

    包资源如下: MyMMs.dcu //最终引用 MyMMsPackage.bpl //安装包 包安装(无需编译,直接安装): 将目录(MyMMs)复制到目标安装目录 Delphi\菜单\Component\Install Packages\...选择包目录中的包文件 .\...

    Delphi 加载GIF动图.zip

    5. **资源管理**:在程序不再需要GIF动画时,记得释放TGIFImage对象以防止内存泄漏。 ```delphi FreeAndNil(GIFImage); ``` 这个项目“Delphi加载GIF动图.zip”对于想要在Delphi 10.2应用程序中添加启动动画或其他...

    《80例上手Delphi7编程》之“网络文件传输”

    在Delphi7中,可以使用FreeAndNil方法来安全地释放对象。 在提供的压缩包文件中,"CPCW_8_3_TransFile.gif"可能是用于示例中的图形界面设计,如进度条的显示效果;"2ccc.com.nfo"可能包含关于实例的额外信息或版权...

    Delphi中用消息处理线程

    6. **释放资源**:在`FormDestroy`方法中释放了所有相关的资源,包括消息分发器、消息处理句柄以及线程。 #### 四、扩展实现 为了进一步理解消息处理线程的实现,我们可以参考`pThread.pas`单元中的`TPMsgThread`...

    Delphi_用流来读取TXT文件

    在Delphi中,可以使用`TMemoryStream`类处理文件读取操作,尤其适用于TXT这类文本文件。以下是对文章中提供的示例进行详细解释。 #### 二、创建并加载TMemoryStream实例 首先,我们需要创建一个`TMemoryStream`...

    delphi从Access输出到Excel

    5. **错误处理和资源释放**: 在实际编程中,要确保处理可能出现的错误,并正确释放所有使用的资源。例如: ```delphi try // 以上代码... except on E: Exception do ShowMessage('Error: ' + E.Message); ...

    delphi队列与堆栈的用法

    ### Delphi中的队列与堆栈使用方法 在Delphi编程中,队列(Queue)与堆栈(Stack)是两种非常重要的数据结构,广泛应用于各种场景,如任务调度、缓存管理等。本文将通过一个示例程序来详细介绍如何在Delphi中使用这...

    Delphi 7高级应用开发源代码

    6. **内存管理与性能优化**:了解Delphi的内存分配和释放机制,以及如何避免内存泄漏,是提升代码性能的关键。源码分析可以帮助理解这些概念,并学习如何有效地使用FreeAndNil、Finalize等函数。 7. **单元测试与...

    Delphi报表的Excel导入导出操作实例..rar

    5. **错误处理和资源释放**:在进行完所有操作后,别忘了释放组件和关闭Excel应用程序,以避免内存泄漏。使用FreeAndNil方法释放对象,并调用ExcelApp的Quit方法关闭应用程序。 6. **性能优化**:当处理大量数据时...

Global site tag (gtag.js) - Google Analytics