`
ylilike
  • 浏览: 147774 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

Delphi中destroy, free, freeAndNil, release用法和区别

 
阅读更多

经过这段时间对delphi中free 和 release 的仔细学习,先总结如下:
1。form.free直接释放资源后,调用OnDestroy事件,但是没有将form指针改为nil
2。form.release 等待资源不再使用后释放资源,同样不修改form指针为nil,所以在destroy中最好使用    release进行资源释放操作。
3。局部变量释放资源时,可以考虑用freeandnil()释放资源,这样效率会高些,能提高内存的利用率
4。 在对窗体操作时,单纯通过assigned(form1)判断窗体是否已经创建是不够的,因为如果窗体通过free   /release进行资源释放的话,form1指向的是一个未知地址,而非nil,所以需要用(not    Assigned(ShowForm)) and (not (ShowForm is  TForm2)) 来判断该窗体是否已经创建在内存中

分享到:
评论

相关推荐

    Delphi线程互斥量和事件使用

    - 可以自定义`TThread`子类,然后在`Execute`方法中使用互斥量和事件来确保线程安全。例如,可以在初始化时创建互斥量,在需要保护的代码块前后使用`WaitForSingleObject`和`ReleaseMutex`。 4. **示例代码片段** ...

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

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

    VC的DLL类导出后,用Delphi调用方法及源码

    在VC的DLL中,通常会提供一个释放对象的接口,如`Release`或`Destroy`。 6. **文档和源码**: 源码和说明文档对理解VC的DLL类如何导出以及Delphi如何调用至关重要。它们应详细解释每个接口函数的用途、参数和...

    如何改变delphi 中按钮的样式

    通过这种方式,你能够创建一个拥有颜色属性的自定义按钮,使得在Delphi的设计环境中可以像使用内置组件一样方便地调整按钮颜色,从而更好地匹配程序界面的视觉风格。这个过程展示了Delphi中自定义组件的基本原理,即...

    delphi析构函数的使用

    在本主题中,我们将深入探讨Delphi析构函数的使用,以及它如何与窗体继承和多态性相结合。 首先,析构函数在Delphi中以` destructor ClassName.Destroy; override; `的形式定义,其中`ClassName`是类名,`Destroy`...

    Delphi中三种延时方法

    本文将详细介绍Delphi中常用的三种延时方法:使用`TTimer`组件、`Sleep`函数以及`GetTickCount`函数,并对比它们的特点与适用场景。 #### 一、TTimer组件 `TTimer`是Delphi自带的一个定时器组件,它可以周期性地...

    DELPHI与C#语法比较

    DELPHI的析构函数用`Destroy`表示,而C#使用`~`符号或`Dispose`方法。 在变量声明方面,DELPHI使用`:=`进行赋值,而C#使用`=`, 这与大多数其他C家族语言相同。在类型系统上,DELPHI的类型系统更为灵活,支持无类型...

    Delphi在DBGrid中插入下拉组合框

    在Delphi编程中,DBGrid(数据库网格)是用于显示和编辑数据库数据的强大组件。它允许用户以表格形式查看和操作数据库记录。然而,有时我们可能需要为某些字段提供更复杂的交互,比如一个下拉组合框(ComboBox),...

    delphi动态 WebBrowser 释放问题.txt

    delphi动态 WebBrowser 释放问题.txt var web:TwebBrowser; procedure TForm1.Button1Click(Sender: TObject); begin web:=TWebBrowser.Create(Self); web.ParentWindow:=Self.Handle; web.SetBounds(100,100,...

    delphi面向对象编程思想刘艺

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作数据的方法封装在一起,以实现代码的模块化和重用性。Delphi是一款强大的Windows应用程序开发工具,它...

    Delphi多线程Demo

    在这个“Delphi多线程Demo”中,我们将探讨如何在Delphi中创建和管理线程,以及如何实现在线程中定时刷新任务,以保持用户界面的响应性。 首先,我们需要理解多线程的基本概念。在单线程程序中,所有任务都在同一个...

    delphi考试试题+答案

    5. **组件的生命周期**:在Delphi中,析构一个组件通常使用`Free`方法,`Constructor`是构造函数,`Destroy`是析构函数,但实际释放组件使用的是`Free`。 6. **指针访问成员**:访问指针变量ptr的域成员fs,正确的...

    delphi中INI文件编程

    在 Delphi 中编程涉及到 INI 文件的操作,主要是利用 `TIniFile` 类,这是一个非常方便的组件,使得在 Delphi 应用程序中保存和读取配置信息变得简单易行。INI 文件通常用于存储应用程序的配置信息,如用户设置、...

    delphi 实现多个浮动透明窗口

    在 Delphi 开发环境中,创建多个浮动透明窗口是一项常见的需求,尤其在设计用户界面时,如模拟迅雷的浮动窗口效果。本篇文章将详细讲解如何使用 Delphi 实现这一功能。 首先,我们要理解 Delphi 中窗口的基本概念。...

    Delphi下面向对象程序设计方法的实现

    在Delphi中,类被视为一种特殊的数据类型,它可以定义一组相关的属性(域)和行为(方法)。例如,一个`TCalendar`类可以定义如下: ```delphi type TCalendar = class private Year, Month, Day : Integer; // ...

    Delphi中实现把数据集中的数据导出为word

    ### Delphi中实现把数据集中的数据导出为Word文档 在Delphi开发环境中,将数据库中的数据导出到Microsoft Word文档是一项常见的需求。本文将详细介绍如何利用Delphi结合Microsoft Office自动化技术(主要通过OLE...

    Delphi互斥防止程序多次启动,程序内部互斥演示

    在Delphi中,我们可以使用TThread.Synchronize或TThread.Queue方法,或者使用高级的同步对象如TCriticalSection、TSemaphore等。 1. 使用TCriticalSection: ```delphi type TMyClass = class private ...

    delphi COM深入编程

    2. **实现类**:根据定义的接口,在Delphi中实现具体的类。 3. **注册组件**:使用RegSvr32或其他方法注册组件到系统中。 4. **使用组件**:其他应用程序可以通过调用注册过的COM组件来使用其实现的功能。 #### 四...

    delphi常见事件

    这些只是Delphi中众多事件、属性和方法的一部分,实际编程中,开发者可以根据需求使用各种其他组件特性和API来实现更复杂的功能。了解并熟练掌握这些基础元素,是成为Delphi开发专家的关键步骤。

    一个delphi7控件编写实例

    编写自定义控件涉及继承自TComponent或TControl类,并重写必要的方法和属性,如OnPaint事件处理程序以绘制控件,以及Create和Destroy方法来管理控件的生命周期。 2. **控制控件显示**: 控件的显示状态可以通过...

Global site tag (gtag.js) - Google Analytics