API соглашения
При использовании API EasyAR Sense необходимо соблюдать определённые соглашения, иначе это может привести к сбою программы, утечке памяти или другим некорректным ситуациям.
Поддерживаемые языки
EasyAR Sense поддерживает следующие языки:
C
Поддерживает C99 и Visual C++, gcc, clang
C++
Поддерживает C++17 и Visual C++, gcc, clang
Используется только std::optional из возможностей C++17. Для использования в среде C++11 можно применить optional lite, заменив std::optional в заголовочных файлах интерфейса на nonstd::optional, а
#include <optional>на#include "nonstd/optional.hpp"Java
Только платформа Android, поддерживает Java SE 6 и выше
Kotlin
Только платформа Android
Objective-C
Только платформы iOS/macOS/visionOS
Swift
Поддерживает Swift 4.2 и выше
C#
Поддерживает .Net Framework 3.5 и выше, .Net Core, .Net 5+, Mono, Unity/Mono, Unity/IL2CPP
Модель потокобезопасности
Для каждого класса, если не указано иное, его статические члены являются потокобезопасными.
Для каждого класса, если не указано иное, его члены экземпляра потокобезопасны при внешней блокировке и не являются потокобезопасными без блокировки.
Для каждого класса, если не указано иное, его деструктор можно вызывать из любого потока после завершения других вызовов объекта, и в этом случае он потокобезопасен.
Модель памяти
Внутри EasyAR Sense использует std::shared_ptr из C++ для подсчёта ссылок. Между подсчётом ссылок и сборкой мусора существует фундаментальная несовместимость, не допускающая бесшовного преобразования.
C, C#, Java/Kotlin
Требуется ручной подсчёт ссылок. Используйте dispose для освобождения ссылок на удерживаемые объекты и clone для создания новой ссылки из существующей.
Особое внимание: параметры, передаваемые в обратные вызовы EasyAR Sense, автоматически освобождаются после завершения вызова. Если требуется их сохранить, необходимо выполнить clone. Автоосвобождение реализовано для поддержки передачи обратных вызовов без какой-либо логики.
Важно: использование объектов EasyAR Sense внутри обратных вызовов, передаваемых в EasyAR Sense, может привести к циклическим ссылкам. Их следует рассматривать как ресурсы (например, файлы, дескрипторы ОС) и освобождать вручную для предотвращения утечек памяти.
C++, Objective-C, Swift
Используется встроенный в язык подсчёт ссылок.
Важно: использование объектов EasyAR Sense внутри обратных вызовов, передаваемых в EasyAR Sense, может привести к циклическим ссылкам. Следует корректно использовать захват ссылок, std::weak_ptr и т.д.
Кодировка строк
Используются следующие кодировки строк в интерфейсах:
C, C++
UTF-8
Java, Kotlin, Objective-C, C#
UTF-16
Swift
UTF-16 или UTF-8, см. документацию Swift