Table of Contents

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 и т.д.

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

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