我正在使用的系统已经制作了自己的参考计数单元,但它与Delphi之间存在冲突。我试图让它与编译器条件兼容,但是我仍然遇到了几个我认为可能会导致的错误,因为ARC仍在运行。如何关闭Delphi XE7中的autorefcount?
2
A
回答
9
很简单,您不能在支持它的平台(当前是Android和iOS)上全局关闭Delphi编译器ARC。
但是,ARC可以在特定引用的代码中绕过。
ARC编译器引入[weak]
和[unsafe]
属性。
[weak]
可用于标记不参与引用计数的弱引用,但您仍然需要至少有一个强引用来保持对象存活。对象被破坏时,弱引用也被设置为nil
。
[unsafe]
可以用于完全打开引用计数以供特定参考,但它意味着在极少数情况下使用,并且它将禁止您混合计数和未计数的引用,从而导致使用率非常有限。
此外,声明为const
和var
的参数未被引用计数。
+2
确实,您不能*禁用*德尔福的ARC refcounting。但是,您可以在需要时绕过它。声明为“const”和“var”的参数不被重新计数。声明为[[weak]'的对象变量不被重新计数(尽管它们被追踪为自动调用)。如果'[weak]'不需要/易受欢迎的情况下,你可以在分配时使用'Pointer'类型转换。当然,'Free()'/'FreeAndNil()'将不再起作用,你将不得不直接调用Destroy()'/'DisposeOf()'。不是一个完美的解决方案,但在某些情况下可能会有所帮助。 – 2015-03-13 17:47:48
相关问题
- 1. Delphi XE7中的IMAGE_FILE_NET_RUN_FROM_SWAP
- 2. 如何在Delphi XE7中使用TFDTable(FireDAC)?
- 3. 在Android上关闭键盘时,应用程序崩溃Delphi Xe7
- 4. 在delphi中使用UrlCreateFromPath XE7
- 5. JVCL安装Delphi XE7
- 6. 的MessageDlg在Delphi XE7安卓
- 7. 如何关闭MessageDlg而不关闭Delphi中的表单?
- 8. 什么是Delphi XE7中的“HotfixLevel 2”?
- 9. 使用Delphi XE7并行库
- 10. Delphi删除控件xe7
- 11. 如何关闭Delphi ListView上的hottracking?
- 12. 如何在Delphi XE7中使用StylesData的TListBoxItem上的AnimateFloat --Firemonkey
- 13. 如何在Delphi XE7的其他程序中执行TTakePhotoFromCameraAction?
- 14. 类未在Delphi XE7中注册
- 15. Delphi - 表单关闭
- 16. 如何在Delphi XE7中重命名表单名称?
- 17. Delphi XE7在Galaxy上的应用P5200
- 18. 如何获得Android的最后通话Delphi的XE7
- 19. 如何在Delphi中关闭TPanel(如TCombo)的外部点击
- 20. Delphi XE7 MultiDevice SQL错误TIMESTAMP Ret。现场
- 21. 无法将TQRChart安装到Delphi XE7?
- 22. Delphi:如何在TGpStringHash中清除哈希表的值 - 关闭
- 23. 如何在delphi中关闭定制的PopupMenu?
- 24. 如何关闭Delphi中的非模态窗体
- 25. 如何查找和关闭Delphi中的弹出式菜单?
- 26. 从Delphi XE7到Delphi XE2使用VCL样式
- 27. 获取时长视频MX Player Android中的Delphi XE7
- 28. delphi XE7中的KeyDown需要转移到寄存器
- 29. Delphi 7关闭DDP文件的创建
- 30. Firemonkey Delphi XE7应用程序在棒棒糖中不起作用
这样下去,你似乎是对抗系统的近期问题的一个主题。继续使用AnsiString。禁用ARC。我想你可能会更好地服务于试图顺应潮流而不是逆流而动。 – 2015-03-13 09:48:44
你说得对。我也在研究替代品,但如果我可以重复使用已有的代码,那将会很好。 – Friso 2015-03-13 10:14:33