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"ersetzenJava
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