Convenções da API
Ao utilizar a API do EasyAR Sense, é necessário seguir algumas convenções, caso contrário, podem ocorrer travamentos do programa, vazamentos de memória ou outros comportamentos inadequados.
Linguagens suportadas
O EasyAR Sense suporta as seguintes linguagens:
C
Suporta C99 e Visual C++, gcc, clang
C++
Suporta C++17 e Visual C++, gcc, clang
O recurso C++17 utilizado é apenas std::optional. Se for necessário utilizar em ambientes C++11, pode-se usar optional lite, substituindo std::optional nos cabeçalhos da interface por nonstd::optional e substituindo
#include <optional>por#include "nonstd/optional.hpp"Java
Suportado apenas na plataforma Android, compatível com Java SE 6 e superior
Kotlin
Suportado apenas na plataforma Android
Objective-C
Suportado apenas nas plataformas iOS/macOS/visionOS
Swift
Suporta Swift 4.2 e superior
C#
Suporta .Net Framework 3.5 e superior, .Net Core, .Net 5+, Mono, Unity/Mono, Unity/IL2CPP
Modelo de segurança de threads
Para cada classe, se não especificado, seus membros estáticos são thread-safe.
Para cada classe, se não especificado, seus membros de instância são thread-safe quando bloqueados externamente, e não são thread-safe quando não bloqueados.
Para cada classe, se não especificado, seu destruidor pode ser chamado de qualquer thread após o término de outras chamadas ao objeto, sendo thread-safe nesse caso.
Modelo de memória
O EasyAR Sense utiliza internamente o std::shared_ptr do C++ para contagem de referências. Existe uma incompatibilidade fundamental entre a contagem de referências e a coleta de lixo, impossibilitando uma conversão perfeita.
C, C#, Java/Kotlin
Requer contagem de referência manual. Utilize dispose para liberar referências de objetos mantidos, e clone para criar uma nova referência a partir de uma existente.
É especialmente importante notar que os parâmetros passados para callbacks do EasyAR Sense são liberados automaticamente após o término do callback. Se precisar retê-los, deve-se usar clone. A liberação automática existe para suportar callbacks sem qualquer lógica interna.
Atenção: utilizar objetos do EasyAR Sense dentro de callbacks passados para o EasyAR Sense pode causar referências circulares. Eles devem ser tratados como recursos (ex: arquivos, handles do sistema operacional) e liberados manualmente para evitar vazamentos de memória.
C++, Objective-C, Swift
Utiliza a contagem de referências nativa da linguagem.
Atenção: utilizar objetos do EasyAR Sense dentro de callbacks passados para o EasyAR Sense pode causar referências circulares. É recomendável usar captura de referência adequada, std::weak_ptr (C++), etc.
Codificação de strings
A codificação das strings utilizadas na interface é a seguinte:
C, C++
UTF-8
Java, Kotlin, Objective-C, C#
UTF-16
Swift
UTF-16 ou UTF-8, consulte a Documentação do Swift