社区
语言基础/算法/系统设计
帖子详情
某个对象如何自己消灭自己?
努力偷懒
2005-08-23 10:37:50
现在有一个叫aFrame的 Tframe对象,aFrame创建出来以后,当这个aFrame对象使用完以后,这个aFrame对象怎么自己销毁自己呢?
就好像这个aFrame里面有一个退出按钮,按了这个按钮以后,这个aFrame就销毁!
...全文
191
14
打赏
收藏
某个对象如何自己消灭自己?
现在有一个叫aFrame的 Tframe对象,aFrame创建出来以后,当这个aFrame对象使用完以后,这个aFrame对象怎么自己销毁自己呢? 就好像这个aFrame里面有一个退出按钮,按了这个按钮以后,这个aFrame就销毁!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Geranium
2005-08-25
打赏
举报
回复
不错,做个记号学习~
努力偷懒
2005-08-25
打赏
举报
回复
嗯嗯!大头鸟的方法是真的可以哦!谢谢!
sdzeng
2005-08-24
打赏
举报
回复
我测试的代码
type
TFrame2 = class(TFrame)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
..........
procedure TFrame2.Button1Click(Sender: TObject);
begin
Self.Free;
end;
sdzeng
2005-08-24
打赏
举报
回复
又去查了一下代码,
给TFrame自己发送CM_RELEASE的确不可行,
这是因为TFrame没有TForm那样的消息处理函数来响应CM_RELEASE消息
这是TCustomForm的消息函数
procedure CMRelease(var Message: TMessage); message CM_RELEASE;
procedure TCustomForm.CMRelease;
begin
Free;
end;
所以要实现楼主的功能,得在TFrame里调用Self.free
我测试了一下,是可以的
广州接入
2005-08-24
打赏
举报
回复
创建的时候指定其Owner,一般都是所在的Form。这样,框架的释放会由Form来负责!
阿呆_
2005-08-24
打赏
举报
回复
返回的内存地址当然没问题, 别把你使用的堆内存地址(这个被释放了)和执行代码所在的代码地址搞混了.
努力偷懒
2005-08-24
打赏
举报
回复
sdzeng(大头鸟) ( ) 所说的,好像有些问题,按我所知的原理来说,释放自己是不可能的,你点击了那个对象里面的退出按钮,点击完以后,这个过程会返回给该窗体,但是该窗体已经不存在了,也就是说返回的内存地址已经有问题了!
努力偷懒
2005-08-23
打赏
举报
回复
嗯!是啊!我想也就只有这样了!不过第一次销毁对象好像没问题!第二次就有问题了!
konhon
2005-08-23
打赏
举报
回复
我試了一下, 好像沒有好辦法喲.
看來你只有利用Visible屬性啦.
不知道其它高手有沒有辦法?
努力偷懒
2005-08-23
打赏
举报
回复
FreeAndNil(aFrame);这个在哪里执行?在对象里面执行吗?如果在这个对象外部执行我想是没有问题的,但是在对象里面执行好像不是很妥当吧?
konhon
2005-08-23
打赏
举报
回复
看錯啦
konhon
2005-08-23
打赏
举报
回复
FreeAndNil(aFrame);
sdzeng
2005-08-23
打赏
举报
回复
看了一下TForm的源代码
TForm释放过程是这样OnClose-> case CloseAction of
caNone: ModalResult := 0;
caFree: Release;
end;
—〉Release—〉PostMessage(Handle, CM_RELEASE, 0, 0);
如果要自己释放自己,可以在按钮里发送CM_RELEASE,不过前提是对象必须要有一个Handle
蓝色光芒
2005-08-23
打赏
举报
回复
把Self.Free;放到类里面执行,只要保证执行这句后,不在对对象成员作其他访问就行了,
消灭
JavaScript怪兽第二季(合集):面向
对象
玩转JS
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型,常用于网页客户端编程,使网页在客户端浏览器中,实现更多地动态功能,表现出更加丰富的视觉效果。本课程是>系列课程的第二季课程。主要包含
对象
的创建、原型链、闭包、上下文、作用域、继承等知识点。
游戏开发性能优化之
对象
池
为什么要使用
对象
池
对象
池优化是游戏开发中非常重要的优化方式,也是影响游戏性能的重要因素之一。 在游戏中有许多
对象
在不停的创建与移除,比如角色攻击子弹、特效的创建与移除,NPC的被
消灭
与刷新等,在创建过程中非常消耗性能,特别是数量多的情况下。
对象
池技术能很好解决以上问题,在
对象
移除消失的时候回收到
对象
池,需要新
对象
的时候直接从
对象
池中取出使用。 优点是减少了实例化
对象
时的开销,且能让
对象
反复使用,减少了新内存分配与垃圾回收器运行的机会。 Cocos官方文档说明的使用方式 https://docs.coco
java包装类
对象
存储在哪,面试官:Java中实例
对象
存储在哪?
在面试时,遇到这个问题,先不要掉以轻心的一口回答在堆中,一般在java程序中,new的
对象
是分配在堆空间中的,但是实际的情况是,大部分的new
对象
会进入堆空间中,而并非是全部的
对象
,还有另外两个地方可以存储new的
对象
,我们称之为栈上分配以及TLAB学习本章需要一些前置知识,这里我列一下:下面进入正题:[toc]理解Java编译流程低级语言是计算机认识的语言、高级语言是程序员认识的语言。如何从高级...
CocosCreator+TypeScripts自己写一个
对象
池
如果制作有大量敌人或子弹需要反复生成和被
消灭
的动作类游戏,我们要如何在游戏进行过程中随时创建和销毁节点呢?
java的
对象
全部在堆上_Java中的
对象
都是在堆上分配的吗?
为了防止歧义,可以换个说法:Java
对象
实例和数组元素都是在堆上分配内存的吗?答:不一定。满足特定条件时,它们可以在(虚拟机)栈上分配内存。JVM内存结构很重要,多多复习这和我们平时的理解可能有些不同。虚拟机栈一般是用来存储基本数据类型、引用和返回地址的,怎么可以存储实例数据了呢?这是因为Java JIT(just-in-time)编译器进行的两项优化,分别称作逃逸分析(escape analys...
语言基础/算法/系统设计
16,749
社区成员
33,245
社区内容
发帖
与我相关
我的任务
语言基础/算法/系统设计
Delphi 语言基础/算法/系统设计
复制链接
扫一扫
分享
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章