Соглашения API
При использовании API EasyAR Sense необходимо соблюдать некоторые соглашения. В противном случае программа может аварийно завершиться, могут возникнуть утечки памяти или другие ненормальные ситуации во время выполнения.
Поддерживаемые языки
EasyAR Sense поддерживает следующие языки:
C
Поддерживаются C99 и Visual C++, gcc, clang
C++
Поддерживаются C++17 и Visual C++, gcc, clang
Единственная используемая возможность C++17 — std::optional. Если нужно использовать это в среде 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 используется C++ std::shared_ptr для подсчета ссылок, а между подсчетом ссылок и сборкой мусора существует фундаментальная несовместимость, поэтому они не могут бесшовно преобразовываться.
C, C#, Java/Kotlin
Требуется ручной подсчет ссылок. Используйте dispose для освобождения ссылок на удерживаемые объекты и clone для создания новой ссылки из существующей ссылки.
Особое внимание следует обратить на то, что параметры, переданные в callback EasyAR Sense, автоматически освобождаются после завершения callback. Если их нужно сохранить, необходимо выполнить clone. Автоматическое освобождение сделано для поддержки callback, не содержащих никакой логики.
Следует учитывать, что использование объектов EasyAR Sense в callback, переданных в EasyAR Sense, может привести к циклическим ссылкам. Их нужно вручную освобождать как ресурсы (например, файлы или дескрипторы операционной системы), чтобы предотвратить утечки памяти.
C++, Objective-C, Swift
Используется встроенный в язык подсчет ссылок.
Следует учитывать, что использование объектов EasyAR Sense в callback, переданных в EasyAR Sense, может привести к циклическим ссылкам. Следует разумно использовать захват ссылок, std::weak_ptr и аналогичные механизмы.
Кодировка строк
Кодировка строк, используемых в интерфейсах, следующая:
C, C++
UTF-8
Java, Kotlin, Objective-C, C#
UTF-16
Swift
UTF-16 или UTF-8, см. документацию Swift