Table of Contents

API 규칙

EasyAR Sense의 API를 사용할 때는 몇 가지 규칙을 따라야 합니다. 그렇지 않으면 프로그램 crash, memory leak 또는 기타 비정상적인 runtime 상황이 발생할 수 있습니다.

지원 언어

EasyAR Sense는 다음 언어를 지원합니다:

  • C

    C99 및 Visual C++, gcc, clang 지원

  • C++

    C++17 및 Visual C++, gcc, clang 지원

    사용되는 C++17 기능은 std::optional뿐입니다. C++11 환경에서 사용해야 하는 경우 optional lite를 사용할 수 있으며, interface header file의 std::optional을 nonstd::optional로 바꾸고 #include <optional>#include "nonstd/optional.hpp"로 바꿉니다.

  • Java

    Android 플랫폼에서만 지원, Java SE 6 이상 지원

  • Kotlin

    Android 플랫폼에서만 지원

  • Objective-C

    iOS/macOS/visionOS 플랫폼에서만 지원

  • Swift

    Swift 4.2 이상 지원

  • C#

    .Net Framework 3.5 이상, .Net Core, .Net 5+, Mono, Unity/Mono, Unity/IL2CPP 지원

thread safety 모델

각 class는 별도 설명이 없으면 static member가 thread-safe입니다.

각 class는 별도 설명이 없으면 instance member가 외부에서 lock된 경우 thread-safe이고, lock되지 않은 경우 thread-safe가 아닙니다.

각 class는 별도 설명이 없으면 object에 대한 다른 호출이 끝난 후 destructor를 임의의 thread에서 호출할 수 있으며, 이때 thread-safe입니다.

메모리 모델

EasyAR Sense는 내부적으로 C++의 std::shared_ptr를 사용하여 reference counting을 수행하며, reference counting과 garbage collection 사이에는 근본적인 비호환성이 있으므로 매끄럽게 변환할 수 없습니다.

  • C, C#, Java/Kotlin

    수동 reference counting이 필요합니다. 보유한 object의 reference를 해제하려면 dispose를 사용하고, 기존 reference에서 새 reference를 만들려면 clone을 사용합니다.

    특히 EasyAR Sense callback에 전달된 parameter는 callback 종료 후 자동으로 해제된다는 점에 주의해야 합니다. 보관해야 하는 경우 반드시 clone해야 합니다. 자동 해제의 이유는 아무런 로직이 없는 callback을 지원하기 위해서입니다.

    EasyAR Sense에 전달된 callback 안에서 EasyAR Sense object를 사용하면 circular reference가 발생할 수 있다는 점에 주의해야 합니다. memory leak을 방지하기 위해 resource(예: file 또는 operating system handle)처럼 수동으로 해제해야 합니다.

  • C++, Objective-C, Swift

    언어에 내장된 reference counting을 사용합니다.

    EasyAR Sense에 전달된 callback 안에서 EasyAR Sense object를 사용하면 circular reference가 발생할 수 있다는 점에 주의해야 합니다. reference capture, std::weak_ptr 등을 적절히 사용하십시오.

문자열 encoding

interface에서 사용되는 문자열의 encoding은 다음과 같습니다:

  • C, C++

    UTF-8

  • Java, Kotlin, Objective-C, C#

    UTF-16

  • Swift

    UTF-16 또는 UTF-8, Swift 문서 참조