Table of Contents

Соглашения 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 и аналогичные механизмы.

Кодировка строк

Кодировка строк, используемых в интерфейсах, следующая: