Система, над которой я работаю, сделала свой собственный счетчик, но это противоречит Delphi. Я попытался сделать его совместимым с условиями компилятора, но я все еще сталкиваюсь с несколькими ошибками, которые, я думаю, могут быть вызваны тем, что ARC все еще включен.Как отключить autorefcount в Delphi XE7?
ответ
Простой, вы не можете глобально отключить компилятор Delphi ARC на платформах, где он поддерживается (в настоящее время Android и iOS).
Однако ARC можно обойти в коде для конкретных ссылок.
Компиляторы ARC вводят [weak]
и [unsafe]
атрибутов.
[weak]
может использоваться для обозначения слабых ссылок, которые не участвуют в подсчете ссылок, но вам все равно необходимо иметь хотя бы одну сильную ссылку, чтобы сохранить объект в живых. Слабые ссылки также устанавливаются на nil
, когда объект уничтожается.
[unsafe]
может использоваться для полного подсчета ссылок для конкретной ссылки, но он предназначен для использования в редких случаях, и он запретит вам смешивать подсчитанные и не засчитанные ссылки, что приводит к очень ограниченному использованию.
Кроме того, параметры, объявленные как const
и var
, не засчитываются.
Правда, вы не можете * отключить * пересчет ARC в Delphi. Но вы можете обойти его, когда это необходимо. Параметры, объявленные как 'const' и' var', не пересчитываются. Переменные объекта, объявленные как '[слабый]', не пересчитываются (хотя они отслеживаются для автоматического заполнения). В тех случаях, когда '[слабый]' нежелателен/не поддается действию, вы можете просто прибегнуть к типу типа «Pointer» при назначении. Конечно, 'Free()'/'FreeAndNil()' больше не будет работать, вам нужно будет вызвать 'Destroy()'/'DisposeOf()' напрямую. Не идеальное решение, но в некоторых случаях это может быть полезно. –
- 1. IMAGE_FILE_NET_RUN_FROM_SWAP в Delphi XE7
- 2. Trim in delphi xe7
- 3. Delphi XE7 + TRegEx как правильно?
- 4. Delphi Console XE7 Clearscreen
- 5. Документация XML Delphi XE7
- 6. Delphi XE7 TString.DelimitedText
- 7. Интеллектуальные указатели Delphi XE7
- 8. Вращение изображения Delphi XE7
- 9. Text Prompt Delphi XE7
- 10. Delphi XE7 iOs Разработка
- 11. Установка JVCL Delphi XE7
- 12. Использование UrlCreateFromPath в delphi XE7
- 13. MessageDlg в Delphi xe7 андроида
- 14. Ошибка в Delphi xe7 Android
- 15. Как переименовать имя формы в Delphi XE7?
- 16. Delphi XE7: TEdit TextHint Color
- 17. Delphi XE7 Android Indy IRC
- 18. Delphi XE7 crashses при выключении
- 19. Использование параллельной библиотеки Delphi XE7
- 20. Как вы перекомпилируете среду выполнения Delphi XE7
- 21. Как изменить язык IDE Delphi XE7
- 22. Как создать приложение-установщик delphi xe7
- 23. Невозможно удалить элементы управления в Delphi xe7
- 24. Что такое "HotfixLevel 2" в Delphi XE7?
- 25. настроить FMX.InAppПокупка.Андройный блок в delphi xe7
- 26. Delphi XE7 canvas stretchdraw в потоке
- 27. Использование контактов Outlook в Delphi XE7
- 28. Не удается установить TQRChart в Delphi XE7?
- 29. Использование LongMonthNames в Delphi XE2 и Delphi XE7
- 30. Как изменить размер шрифта заголовка Stringgrid в Delphi Firemonkey XE7?
Это продолжает тему ваших последних вопросов, где вы, кажется, бороться против системы. Продолжайте использовать AnsiString. Отключить ARC. Я думаю, вам лучше помочь, пытаясь пойти с потоком, а не плавать против тока. –
Вы правы. Я также работаю над альтернативами, но было бы неплохо, если бы я мог повторно использовать уже существующий код. – Friso