Convenciones de API
Al usar las API de EasyAR Sense, debe seguir algunas convenciones. De lo contrario, el programa puede bloquearse, pueden producirse memory leaks u otras situaciones anormales en tiempo de ejecución.
Lenguajes compatibles
EasyAR Sense admite los siguientes lenguajes:
C
Admite C99 y Visual C++, gcc, clang
C++
Admite C++17 y Visual C++, gcc, clang
La única característica de C++17 utilizada es std::optional. Si necesita usarlo en un entorno C++11, puede usar optional lite, sustituir std::optional en los archivos de cabecera de la interfaz por nonstd::optional y sustituir
#include <optional>por#include "nonstd/optional.hpp"Java
Solo se admite en la plataforma Android, compatible con Java SE 6 y versiones posteriores
Kotlin
Solo se admite en la plataforma Android
Objective-C
Solo se admite en plataformas iOS/macOS/visionOS
Swift
Admite Swift 4.2 y versiones posteriores
C#
Admite .Net Framework 3.5 y versiones posteriores, .Net Core, .Net 5+, Mono, Unity/Mono, Unity/IL2CPP
Modelo de seguridad de hilos
Para cada clase, salvo que se indique lo contrario, sus miembros estáticos son thread-safe.
Para cada clase, salvo que se indique lo contrario, sus miembros de instancia son thread-safe cuando se bloquean externamente, y no son thread-safe cuando no se bloquean.
Para cada clase, salvo que se indique lo contrario, después de que finalicen todas las demás llamadas al objeto, su destructor puede llamarse desde cualquier hilo, y esto es thread-safe.
Modelo de memoria
EasyAR Sense utiliza internamente C++ std::shared_ptr para el conteo de referencias, y existe una incompatibilidad fundamental entre el conteo de referencias y la garbage collection, por lo que no pueden convertirse de forma transparente.
C, C#, Java/Kotlin
Se requiere conteo manual de referencias. Use dispose para liberar las referencias a los objetos mantenidos y clone para crear una nueva referencia desde una referencia existente.
Preste especial atención a que los parámetros pasados a callbacks de EasyAR Sense se liberan automáticamente después de que finaliza el callback. Si necesita conservarlos, debe hacer clone. La razón de la liberación automática es admitir callbacks que no contienen ninguna lógica.
Tenga en cuenta que usar objetos EasyAR Sense en callbacks pasados a EasyAR Sense puede causar referencias circulares. Deben liberarse manualmente como recursos (por ejemplo, archivos o handles del sistema operativo) para evitar memory leaks.
C++, Objective-C, Swift
Use el conteo de referencias incorporado del lenguaje.
Tenga en cuenta que usar objetos EasyAR Sense en callbacks pasados a EasyAR Sense puede causar referencias circulares. Use adecuadamente captura por referencia, std::weak_ptr y mecanismos similares.
Codificación de cadenas
La codificación de las cadenas utilizadas en las interfaces es la siguiente:
C, C++
UTF-8
Java, Kotlin, Objective-C, C#
UTF-16
Swift
UTF-16 o UTF-8, consulte la documentación de Swift