gpt4 book ai didi

delphi - 在悉尼,在物体前面设置[弱]会受到处罚吗?

转载 作者:行者123 更新时间:2023-12-02 02:18:11 27 4
gpt4 key购买 nike

在delphi sydney中,在对象(不是接口(interface))前面设置[weak]会受到惩罚吗?示例:

  TMyObject = class(Tobject)
Private
[weak] FOwner: TMyObject;
....
end;

我问这个问题是因为我知道内部[弱]引用存储在列表中,因此它有一些缺点(关于速度)。由于现在悉尼 ARC 已经消失,因此不再需要将 [weak] 放在对象前面(据我所知),但由于我想让我的代码与 Rio 兼容,所以我问我是否可以安全地离开[弱]引用不会遭受无用性能损失(在悉尼)

there is a teeny-weeny problem with the [weak] attribute. It denotes azeroing weak reference that will be zeroed (niled) when the object itpoints to is no longer valid. In order to do that, the compiler has totrack such objects at runtime and that introduces some overhead. Ifyou are tracking many such references, that can introduce asignificant performance loss.

最佳答案

对象引用

[weak]属性仅在ARC编译器上实现。在经典的非 ARC 编译器上,[weak] 属性不执行任何操作,并且在对象引用上使用时没有任何损失。

由于 10.4 Sydney 不再具有 ARC 编译器,因此不再需要 [weak] 属性,但它可用于保持向后兼容性。它不会对使用非 ARC 编译器编译的代码产生影响。

[weak] 对非 ARC 编译器没有影响,可以通过 CPU View 轻松检查。

var
Obj: TObject;
[weak] WObj: TObject;
begin
Obj := TObject.Create;
WObj := Obj;

Obj.Free;
end;

在 Android ARC 编译器 10.3 上,将 Obj 分配给弱 WObj 将调用 _InstWeakCopy 过程来跟踪弱引用:

CPU view - ARC compiler

使用 10.4 Android 编译器编译时的相同代码不再调用 _InstWeakCopy

CPU view - non ARC compiler :


注意:此答案严格涵盖 [weak] 属性在对象引用上使用时的行为。用于接口(interface)引用[weak] 的工作方式与以前相同,因为它是在 10.1 Berlin 的非 ARC 编译器中引入的。

关于delphi - 在悉尼,在物体前面设置[弱]会受到处罚吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66869126/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com