Convenzioni API
Quando si usano le API di EasyAR Sense, è necessario seguire alcune convenzioni. In caso contrario, il programma potrebbe andare in crash, potrebbero verificarsi memory leak o altre situazioni di runtime anomale.
Linguaggi supportati
EasyAR Sense supporta i seguenti linguaggi:
C
Supporta C99 e Visual C++, gcc, clang
C++
Supporta C++17 e Visual C++, gcc, clang
L'unica funzionalità C++17 usata è std::optional. Se è necessario usarla in un ambiente C++11, è possibile usare optional lite, sostituire std::optional nei file header dell'interfaccia con nonstd::optional e sostituire
#include <optional>con#include "nonstd/optional.hpp"Java
Supportato solo sulla piattaforma Android, supporta Java SE 6 e versioni successive
Kotlin
Supportato solo sulla piattaforma Android
Objective-C
Supportato solo sulle piattaforme iOS/macOS/visionOS
Swift
Supporta Swift 4.2 e versioni successive
C#
Supporta .Net Framework 3.5 e versioni successive, .Net Core, .Net 5+, Mono, Unity/Mono, Unity/IL2CPP
Modello di thread safety
Per ogni classe, salvo diversa indicazione, i suoi membri statici sono thread-safe.
Per ogni classe, salvo diversa indicazione, i suoi membri di istanza sono thread-safe se bloccati esternamente, e non sono thread-safe senza blocco.
Per ogni classe, salvo diversa indicazione, dopo la fine di tutte le altre chiamate all'oggetto, il suo distruttore può essere chiamato da qualsiasi thread, e ciò è thread-safe.
Modello di memoria
EasyAR Sense usa internamente C++ std::shared_ptr per il conteggio dei riferimenti, e tra conteggio dei riferimenti e garbage collection esiste un'incompatibilità fondamentale, quindi non possono essere convertiti in modo trasparente.
C, C#, Java/Kotlin
È necessario il conteggio manuale dei riferimenti. Usare dispose per rilasciare i riferimenti agli oggetti detenuti e usare clone per creare un nuovo riferimento da un riferimento esistente.
Prestare particolare attenzione al fatto che i parametri passati ai callback di EasyAR Sense vengono rilasciati automaticamente al termine del callback. Se è necessario conservarli, bisogna eseguire clone. Il motivo del rilascio automatico è supportare callback che non contengono alcuna logica.
Si noti che l'uso di oggetti EasyAR Sense nei callback passati a EasyAR Sense può causare riferimenti circolari. Devono essere rilasciati manualmente come risorse (ad esempio file o handle del sistema operativo) per prevenire memory leak.
C++, Objective-C, Swift
Usano il conteggio dei riferimenti integrato nel linguaggio.
Si noti che l'uso di oggetti EasyAR Sense nei callback passati a EasyAR Sense può causare riferimenti circolari. Usare in modo appropriato capture per riferimento, std::weak_ptr e meccanismi simili.
Codifica delle stringhe
La codifica delle stringhe usate nelle interfacce è la seguente:
C, C++
UTF-8
Java, Kotlin, Objective-C, C#
UTF-16
Swift
UTF-16 oppure UTF-8, vedere la documentazione Swift