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