Table of Contents

Convenzioni API

Quando si utilizza l'API di EasyAR Sense, è necessario seguire alcune convenzioni, altrimenti potrebbero verificarsi arresti anomali del programma, perdite di memoria o altri comportamenti anomali.

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

    La funzionalità C++17 utilizzata è solo std::optional. Se necessario utilizzare in un ambiente C++11, è possibile utilizzare optional lite, sostituendo std::optional negli header delle interfacce con nonstd::optional, e sostituendo #include <optional> con #include "nonstd/optional.hpp"

  • Java

    Supporta solo piattaforma Android, supporta Java SE 6 e superiori

  • Kotlin

    Supporta solo piattaforma Android

  • Objective-C

    Supporta solo piattaforme iOS/macOS/visionOS

  • Swift

    Supporta Swift 4.2 e superiori

  • C#

    Supporta .Net Framework 3.5 e superiori, .Net Core, .Net 5+, Mono, Unity/Mono, Unity/IL2CPP

Modello di sicurezza dei thread

Per ogni classe, se non diversamente specificato, i suoi membri statici sono thread-safe.

Per ogni classe, se non diversamente specificato, i suoi membri di istanza sono thread-safe solo se esternamente sincronizzati (ad esempio, con lock). Senza sincronizzazione, non sono thread-safe.

Per ogni classe, se non diversamente specificato, è possibile chiamare il suo distruttore da qualsiasi thread dopo aver terminato altre chiamate sull'oggetto, ed è thread-safe in quel contesto.

Modello di memoria

Internamente, EasyAR Sense utilizza std::shared_ptr di C++ per il conteggio dei riferimenti. Esiste un'incompatibilità fondamentale tra il conteggio dei riferimenti e la garbage collection, impedendo una conversione senza soluzione di continuità.

  • C, C#, Java/Kotlin

    Richiede un conteggio manuale dei riferimenti. Usa dispose per rilasciare i riferimenti agli oggetti posseduti. Usa clone per creare un nuovo riferimento da uno esistente.

    È particolarmente importante notare che i parametri passati alle callback di EasyAR Sense vengono rilasciati automaticamente al termine della callback. Se è necessario conservarli, bisogna effettuare un clone. Questo rilascio automatico è implementato per supportare l'uso di callback prive di logica interna.

    Attenzione: l'utilizzo di oggetti EasyAR Sense all'interno delle callback passate a EasyAR Sense potrebbe creare riferimenti circolari. Devono essere gestiti come risorse (ad esempio file, handle di sistema) e rilasciati manualmente per prevenire perdite di memoria.

  • C++, Objective-C, Swift

    Utilizza il conteggio dei riferimenti nativo del linguaggio.

    Attenzione: l'utilizzo di oggetti EasyAR Sense all'interno delle callback passate a EasyAR Sense potrebbe creare riferimenti circolari. Utilizzare appropriatamente la cattura per riferimento, std::weak_ptr, o meccanismi equivalenti.

Codifica delle stringhe

La codifica delle stringhe utilizzata nelle interfacce è la seguente:

  • C, C++

    UTF-8

  • Java, Kotlin, Objective-C, C#

    UTF-16

  • Swift

    UTF-16 o UTF-8, consultare la Documentazione Swift