2015-03-13 56 views
2

我正在使用的系统已经制作了自己的参考计数单元,但它与Delphi之间存在冲突。我试图让它与编译器条件兼容,但是我仍然遇到了几个我认为可能会导致的错误,因为ARC仍在运行。如何关闭Delphi XE7中的autorefcount?

+7

这样下去,你似乎是对抗系统的近期问题的一个主题。继续使用AnsiString。禁用ARC。我想你可能会更好地服务于试图顺应潮流而不是逆流而动。 – 2015-03-13 09:48:44

+0

你说得对。我也在研究替代品,但如果我可以重复使用已有的代码,那将会很好。 – Friso 2015-03-13 10:14:33

回答

9

很简单,您不能在支持它的平台(当前是Android和iOS)上全局关闭Delphi编译器ARC。

但是,ARC可以在特定引用的代码中绕过。

ARC编译器引入[weak][unsafe]属性。

[weak]可用于标记不参与引用计数的弱引用,但您仍然需要至少有一个强引用来保持对象存活。对象被破坏时,弱引用也被设置为nil

[unsafe]可以用于完全打开引用计数以供特定参考,但它意味着在极少数情况下使用,并且它将禁止您混合计数和未计数的引用,从而导致使用率非常有限。

此外,声明为constvar的参数未被引用计数。

ARC in Delphi mobile compilers

+2

确实,您不能*禁用*德尔福的ARC refcounting。但是,您可以在需要时绕过它。声明为“const”和“var”的参数不被重新计数。声明为[[weak]'的对象变量不被重新计数(尽管它们被追踪为自动调用)。如果'[weak]'不需要/易受欢迎的情况下,你可以在分配时使用'Pointer'类型转换。当然,'Free()'/'FreeAndNil()'将不再起作用,你将不得不直接调用Destroy()'/'DisposeOf()'。不是一个完美的解决方案,但在某些情况下可能会有所帮助。 – 2015-03-13 17:47:48

相关问题