API 관례
EasyAR Sense의 API를 사용할 때는 몇 가지 관례를 따라야 합니다. 그렇지 않으면 프로그램 충돌, 메모리 누수 또는 기타 비정상 동작이 발생할 수 있습니다.
지원하는 언어
EasyAR Sense는 다음과 같은 언어를 지원합니다:
C
C99 및 Visual C++, gcc, clang 지원
C++
C++17 및 Visual C++, gcc, clang 지원
사용되는 C++17 기능은 std::optional 뿐입니다. C++11 환경에서 사용해야 하는 경우 optional lite를 사용할 수 있습니다. 인터페이스 헤더 파일의 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 지원
스레드 안전성 모델
별도로 명시되지 않는 한, 각 클래스의 정적 멤버는 스레드로부터 안전합니다.
별도로 명시되지 않는 한, 각 클래스의 인스턴스 멤버는 외부적으로 잠금(lock)을 걸었을 때 스레드로부터 안전하며, 잠금 없이는 스레드로부터 안전하지 않습니다.
별도로 명시되지 않는 한, 객체의 다른 호출을 종료한 후에는 어떤 스레드에서든 해당 객체의 소멸자를 호출할 수 있으며, 이 경우 스레드로부터 안전합니다.
메모리 모델
EasyAR Sense는 내부적으로 C++의 std::shared_ptr을 사용하여 참조 카운팅(reference counting)을 합니다. 참조 카운팅과 가비지 컬렉션(garbage collection)은 근본적으로 호환되지 않으며, 완벽하게 변환할 수 없습니다.
C, C#, Java/Kotlin
수동 참조 카운팅이 필요합니다. dispose를 사용하여 보유한 객체 참조를 해제하고, clone을 사용하여 하나의 참조로부터 새로운 참조를 생성합니다.
특히 EasyAR Sense 콜백에 전달된 매개변수는 콜백이 끝나면 자동으로 해제된다는 점에 유의해야 합니다. 보존이 필요하다면 반드시 clone을 해야 합니다. 이 자동 해제는 아무런 로직이 없는 콜백을 전달하는 것을 지원하기 위한 이유입니다.
주의: EasyAR Sense 콜백에 전달될 때 EasyAR Sense 객체를 사용하는 경우 참조 순환(reference cycle)이 발생할 수 있습니다. 메모리 누수를 방지하기 위해 파일이나 운영 체제 핸들과 같은 리소스처럼 수동으로 해제해야 합니다.
C++, Objective-C, Swift
언어에 내장된 참조 카운팅을 사용합니다.
주의: EasyAR Sense 콜백에 전달될 때 EasyAR Sense 객체를 사용하는 경우 참조 순환(reference cycle)이 발생할 수 있습니다. 참조 캡처(reference capture), std::weak_ptr 등을 적절히 사용해야 합니다.
문자열 인코딩
인터페이스에서 사용하는 문자열의 인코딩은 다음과 같습니다:
C, C++ UTF-8
Java, Kotlin, Objective-C, C# UTF-16
Swift UTF-16 또는 UTF-8, Swift 문서 참조