Table of Contents

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: