Table of Contents

API-Konventionen

Bei der verwendung der EasyAR Sense API müssen einige konventionen befolgt werden, da sie sonst zu programmabstürzen, speicherlecks oder anderen fehlfunktionen führen können.

Unterstützte sprachen

EasyAR Sense unterstützt die folgenden sprachen:

  • C

    Unterstützt C99 und Visual C++, gcc, clang

  • C++

    Unterstützt C++17 und Visual C++, gcc, clang

    Die verwendeten C++17-Funktionen beschränken sich auf std::optional. Für die verwendung in C++11-umgebungen kann optional lite verwendet werden, indem std::optional in den schnittstellen-headern durch nonstd::optional ersetzt und #include <optional> durch #include "nonstd/optional.hpp" ersetzt wird.

  • Java

    Nur für Android-plattformen, unterstützt Java SE 6 und höher

  • Kotlin

    Nur für Android-plattformen

  • Objective-C

    Nur für iOS/macOS/visionOS-plattformen

  • Swift

    Unterstützt Swift 4.2 und höher

  • C#

    Unterstützt .Net Framework 3.5 und höher, .Net Core, .Net 5+, Mono, Unity/Mono, Unity/IL2CPP

Thread-sicherheitsmodell

Für jede klasse sind, falls nicht anders angegeben, die statischen mitglieder threadsicher.

Für jede klasse sind, falls nicht anders angegeben, die instanzmitglieder threadsicher, wenn extern eine sperre verwendet wird, und nicht threadsicher, wenn keine sperre verwendet wird.

Für jede klasse kann der destruktor nach dem beenden anderer aufrufe auf das objekt aus einem beliebigen thread aufgerufen werden und ist in diesem fall threadsicher, sofern nicht anders angegeben.

Speichermodell

EasyAR Sense verwendet intern C++ std::shared_ptr zur referenzzählung. Es besteht eine grundlegende inkompatibilität zwischen referenzzählung und garbage collection, die eine nahtlose konvertierung verhindert.

  • C, C#, Java/Kotlin

    Erfordern manuelle referenzzählung. Verwendet dispose, um referenzen auf gehaltene objekte freizugeben, und clone, um eine neue referenz aus einer bestehenden zu erstellen.

    Besonders wichtig: Parameter, die in callbacks von EasyAR Sense übergeben werden, werden automatisch nach dem callback freigegeben. Müssen sie beibehalten werden, ist ein clone erforderlich. Die automatische freigabe erfolgt, um callbacks ohne jegliche logik zu unterstützen.

    Beachten sie: Die verwendung von EasyAR Sense-objekten in callbacks, die an EasyAR Sense übergeben werden, kann zu zyklischen referenzen führen. Diese müssen wie ressourcen (z.b. dateien, betriebssystem-handles) manuell freigegeben werden, um speicherlecks zu vermeiden.

  • C++, Objective-C, Swift

    Verwenden die sprachintegrierte referenzzählung.

    Beachten sie: Die verwendung von EasyAR Sense-objekten in callbacks, die an EasyAR Sense übergeben werden, kann zu zyklischen referenzen führen. Es ist ratsam, referenzerfassung, std::weak_ptr usw. angemessen zu verwenden.

Zeichenkettenkodierung

Die verwendete zeichenkettenkodierung in den schnittstellen ist wie folgt:

  • C, C++

    UTF-8

  • Java, Kotlin, Objective-C, C#

    UTF-16

  • Swift

    UTF-16 oder UTF-8, siehe Swift-Dokumentation