标题: |
FMX 中,什么地方用 Free,什么地方用 DisposOf? |
浏览:383 |
|
加入我的收藏 |
楼主: |
按照网友建议,把代码中所有的Free换成DisposOf,不知道有没有什么隐患?我发现在安卓中,关闭程序时,有一定几率会发生无响应,不知道与此有没有关系?看看Delphi自带例程,大部分还是用Free,偶尔用一下DisposOf..
----------------------------------------------
http://mcool./ |
作者: |
|
2017-6-23 12:24:04 |
1楼: |
假设 arc 关闭,都用 free 假设 arc 开启,你不要了,别人要的,请 free 你不要了,也不想别人要的,请 DisposOf,但是极有可能被引用而依然无法销毁。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2017-6-23 12:27:28 |
2楼: |
用 Free 不起作用的时候 用 DisposOf。 比如动态删除 控件 时,用 DisposOf。
----------------------------------------------
God with US
|
作者: |
|
2017-6-23 13:09:31 |
3楼: |
是不是在 FormDestroy 里面,用 Free 无忧?
----------------------------------------------
http://mcool./
|
作者: |
|
2017-6-23 15:41:57 |
4楼: |
DELPHI的释放真是混乱 Free DisposOf FreeAndNil 好几种
----------------------------------------------
就怕想不到,没有做不到的
|
作者: |
|
2017-6-23 15:45:47 |
5楼: |
FreeAndNil 就是 A.free; A := nil; 的简化而已。 要不是 ARC ,要不是讨好 java 开发,要狗屁的 DisposOf
其实,完全可以不要 DisposOf ,Free 代替就行。 Emb 也不知那个领导疯了,非要搞个新的。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2017-6-24 11:38:01 |
6楼: |
开着arc的时候Free就是啥也不做. 没开arc的时候DisposeOf就是Free. 所以尽量用DisposeOf,PC和移动平台通吃.
----------------------------------------------
武稀松http://www.
|
作者: |
|
2017-6-26 11:43:09 |
7楼: |
不明白为什么要搞个DisposeOf,唉,落伍了我……
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 偶的生活博客 偶的技术军事博客
|
作者: |
|
2017-6-26 14:40:07 |
8楼: |
他们搞DisposeOf的意思就是,做个声明,这个资源我不用了,引用计数减一 Free的意思就是释放资源. 但从文字和美学上来讲生命周期资管理的用DisposeOf这个词更合力.
----------------------------------------------
武稀松http://www.
|
作者: |
|
2017-6-26 14:41:41 |
9楼: |
free 既然是释放资源,那么也应该是不要了的意思。引用也应该减一。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2017-6-26 16:03:28 |
10楼: |
楼上两位大侠,我用Delphi 10.x开发安卓应用,默认是开启了ARC的吧?那么我在FormDestroy里Free各种东西,它实际会自动释放资源的吧,虽然Free什么也不干(或者干脆不用写Free?)
----------------------------------------------
http://mcool./
|
作者: |
|
2017-6-26 16:14:39 |
11楼: |
凡是无人引用的对象,自动清理。 但是 全局对象,自然就无法清理,总有一个全局在引用他。 所以,你可以写 全局对象 := nil; 这样,就全局就不引用了。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2017-6-26 17:57:13 |
12楼: |
综上,在局部用DisposeOf,全局对象在程序关闭时用FreeAndNil,应该是完美的..
----------------------------------------------
http://mcool./
|
作者: |
|
2017-6-26 22:21:09 |
13楼: |
@FlyingWang 如果有一个匿名线程仍在运行,应该怎样来关闭应用?立即关闭应该不可行(必定卡死),是应该等待线程完成吧?
----------------------------------------------
http://mcool./
|
作者: |
|
2017-6-27 10:00:36 |
14楼: |
[假设 arc 开启,你不要了,别人要的,请 free] [他们搞DisposeOf的意思就是,做个声明,这个资源我不用了,引用计数减一] 对象怎样就会引用计数加一呢?或者对象怎么多人(多处)共用?如堕迷雾。 Windows的DLL还好理解,Load一下,引用计数加一,不用了,就Free一下。
另外,第一句应该不对啊,应该用DisposeOf啊,引用计数减一嘛..我被绕晕了
----------------------------------------------
http://mcool./
|
作者: |
|
2017-6-27 10:05:29 |
15楼: |
DisposeOf 不是引用减一,而是试图叫所有引用都放弃引用。 能不能成功难说。 反正调用者自己是放弃引用了。 A := B A 和 B 所引用的对象的引用就会加一. B.DisposeOf 可能 A 和 B 都减一。 B := nil 对象引用减一。
临时变量 当他的生命周期结束的时候,引用会减一。
----------------------------------- |
|