博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Create参数为:nil/self/application的区别
阅读量:5273 次
发布时间:2019-06-14

本文共 847 字,大约阅读时间需要 2 分钟。

 
2009-01-12 12:41 LP
万老师: 你好! 麻烦你能不能讲一下MyForm1 := TMyForm.Create(nil);
Create参数为:nil/self/application的区别,最好能看到实际效果的区别
谢谢
  
 
@LP
例如: My := TMy.Create(X);
其中的 X 将会成为控件 My 的 Owner 属性, 
可能会不只一个控件把 X 当作 Owner.
当 X 释放时, 它会同时释放那些把它当作 Owner 的所有控件.
譬如:
btn1 := TButton.Create(Panel1);
btn2 := TButton.Create(Panel1);
btn3 := TButton.Create(Panel1);
当 Panel1.Free 时, btn1、btn2、btn3 都会同时释放.
如果 btn1 := TButton.Create(Self); {譬如 Self 是窗体}
那么窗体释放时, btn1 也会同时释放.
btn1 := TButton.Create(Application);
当程序销毁时也会同时释放 btn1.
这对单窗体程序来讲基本没有区别, 但如果是多窗体就不一样了.
如果 btn1 := TButton.Create(nil);
那么 btn1 得自己负责手动释放(btn1.Free).
你也许会问: 假如 btn1 所在的窗体都销毁了, btn1 还会存在吗?
答: 如果 Application 还在 btn1 不会消失(在 Create(nil) 的情况下).
一般情况下, 当 Application 不在了, 系统会释放它所包含的控件.
但等系统来做这件事不是个好习惯, 因为有例外(一般是在跨进程的时候), 有这样一句话:
一个对象分配的内存可能会比对象本身存在的时间长.
 

转载于:https://www.cnblogs.com/chuangyiyuan/p/6406964.html

你可能感兴趣的文章
html 中input标签的name属性
查看>>
快乐,因为有你——五一苏行记(一)
查看>>
python学习笔记(18)异常处理
查看>>
Jstree 使用CheckBox插件 选中父节点时被禁用的子节点也会选中问题
查看>>
UVa 11210 - Chinese Mahjong
查看>>
使用Jmail组件发邮件遇到问题的解决方法大全
查看>>
python 学习笔记之@property
查看>>
Java Web学习总结(7)JSP(一)
查看>>
WCF 大数据上传 Web.config 配置
查看>>
1-5.Webpack对Html模板处理
查看>>
第四次实验报告
查看>>
Mybatis中的update动态SQL语句
查看>>
文件处理
查看>>
shell命令之查看日志more/less命令
查看>>
测试TinyMCE
查看>>
C#----我对坐标系的理解和图形转动
查看>>
18-模块和包
查看>>
Python 系统性能信息模块psutil
查看>>
python 简单的爬虫
查看>>
Log4net介绍
查看>>