Table of Contents

API-Konventionen

Bei der Verwendung der APIs von EasyAR Sense müssen einige Konventionen beachtet werden. Andernfalls kann das Programm abstürzen, es können Speicherlecks auftreten oder andere ungewöhnliche Laufzeitsituationen entstehen.

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

    Das einzige verwendete C++17-Feature ist std::optional. Wenn es in einer C++11-Umgebung verwendet werden muss, können Sie optional lite verwenden, std::optional in den Interface-Headerdateien durch nonstd::optional ersetzen und #include <optional> durch #include "nonstd/optional.hpp" ersetzen

  • Java

    Nur auf der Android-Plattform unterstützt, Java SE 6 und höher

  • Kotlin

    Nur auf der Android-Plattform unterstützt

  • Objective-C

    Nur auf iOS/macOS/visionOS-Plattformen unterstützt

  • 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-Safety-Modell

Für jede Klasse gilt, sofern nicht anders angegeben, dass ihre statischen Member thread-safe sind.

Für jede Klasse gilt, sofern nicht anders angegeben, dass ihre Instanzmember bei externer Sperrung thread-safe sind und ohne Sperrung nicht thread-safe sind.

Für jede Klasse gilt, sofern nicht anders angegeben, dass nach Abschluss aller anderen Aufrufe des Objekts sein Destruktor von jedem Thread aufgerufen werden kann; dies ist thread-safe.

Speichermodell

EasyAR Sense verwendet intern C++ std::shared_ptr zur Referenzzählung. Zwischen Referenzzählung und Garbage Collection besteht eine grundlegende Inkompatibilität, sodass sie nicht nahtlos ineinander umgewandelt werden können.

  • C, C#, Java/Kotlin

    Manuelle Referenzzählung ist erforderlich. Verwenden Sie dispose, um Referenzen auf gehaltene Objekte freizugeben, und clone, um aus einer Referenz eine neue Referenz zu erstellen.

    Besonders zu beachten ist, dass Parameter, die an Callbacks von EasyAR Sense übergeben werden, nach Ende des Callbacks automatisch freigegeben werden. Wenn Sie sie behalten müssen, müssen Sie clone ausführen. Der Grund für die automatische Freigabe ist die Unterstützung von Callbacks ohne jegliche Logik.

    Beachten Sie, dass die Verwendung von EasyAR Sense-Objekten in an EasyAR Sense übergebenen Callbacks zu zyklischen Referenzen führen kann. Sie müssen wie Ressourcen (z. B. Dateien oder Betriebssystem-Handles) manuell freigegeben werden, um Speicherlecks zu verhindern.

  • C++, Objective-C, Swift

    Verwenden Sie die in die Sprache integrierte Referenzzählung.

    Beachten Sie, dass die Verwendung von EasyAR Sense-Objekten in an EasyAR Sense übergebenen Callbacks zu zyklischen Referenzen führen kann. Verwenden Sie Referenzerfassung, std::weak_ptr und ähnliche Mechanismen angemessen.

Zeichenkodierung

Die Kodierung der in den Interfaces verwendeten Strings ist wie folgt:

  • C, C++

    UTF-8

  • Java, Kotlin, Objective-C, C#

    UTF-16

  • Swift

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