【发布时间】:2021-03-30 10:23:07
【问题描述】:
在 delphi sydney 中,在对象(不是接口)前面设置 [weak] 会造成惩罚吗? 例子:
TMyObject = class(Tobject)
Private
[weak] FOwner: TMyObject;
....
end;
我问是因为我知道内部 [weak] 引用存储在一个列表中,因此它有一些缺点(关于速度)。由于现在悉尼 ARC 已经消失,因此不再需要将 [weak] 放在对象前面(据我所知),但是因为我想让我的代码与 Rio 兼容,所以我问我是否可以安全地离开没有遭受无用性能损失的 [弱] 参考(在悉尼)
[weak] 属性有一个小问题。它表示一个 清零弱引用,当对象它时将被清零(niled) 指向不再有效。为了做到这一点,编译器必须 在运行时跟踪此类对象,这会带来一些开销。如果 您正在跟踪许多这样的参考资料,这些参考资料可以引入 显着的性能损失。
【问题讨论】:
-
它什么都不做。
-
@StefanGlienke 有什么来源可以确认这种行为吗?我做了一些测试,是的,看起来是真的,但更愿意 100% 确定
-
你不相信我是这件事的最终真相来源吗? Pff ;) 好吧,Rio 有这个页面:docwiki.embarcadero.com/RADStudio/Rio/en/… - 悉尼文档不再有它。
[Weak]在未定义WEAKINSTREF时从未执行任何操作 - fwiw 页面 docwiki.embarcadero.com/RADStudio/Sydney/de/… 不正确 - 因为不应再在任何平台上定义AUTOREFCOUNT和WEAKINSTREF。 -
@StefanGlienke 啊,是的,我相信你,但你是……嗯,你是人类 :)
-
通常情况下,@StefanGlienke 的陈述比 docwiki 上的陈述更准确。
标签: delphi firemonkey