Table of Contents

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 をサポート

スレッド安全モデル

特に記載がない限り、各クラスの静的メンバはスレッドセーフです。

特に記載がない限り、各クラスのインスタンスメンバは、外部でロックをかける場合にスレッドセーフであり、ロックをかけない場合はスレッドセーフではありません。

特に記載がない限り、オブジェクトに対する他の呼び出しを終了した後、任意のスレッドからそのデストラクタを呼び出すことができ、この時点でスレッドセーフです。

メモリモデル

EasyAR Sense は内部で C++ の std::shared_ptr を使用して参照カウントを行います。参照カウントとガベージコレクションには根本的な非互換性があり、シームレスに変換することはできません。

  • C, C#, Java/Kotlin

    手動参照カウントが必要です。dispose を使用して保持しているオブジェクトへの参照を解放し、clone を使用して参照から新しい参照を作成します。

    特に注意が必要なのは、EasyAR Sense のコールバックに渡されるパラメータは、コールバック終了後に自動的に解放されることです。保持する必要がある場合は clone を行わなければなりません。自動解放されるのは、ロジックを持たないコールバックを渡すことをサポートするためです。

    EasyAR Sense のコールバックに渡される際、EasyAR Sense のオブジェクトを使用すると循環参照が発生する可能性があることに注意してください。メモリリークを防ぐために、リソース(ファイル、OS ハンドルなど)と同様に手動で解放する必要があります。

  • C++, Objective-C, Swift

    言語組み込みの参照カウントを使用します。

    EasyAR Sense のコールバックに渡される際、EasyAR Sense のオブジェクトを使用すると循環参照が発生する可能性があることに注意してください。参照のキャプチャ、std::weak_ptr などを適切に使用してください。

文字列エンコーディング

インターフェースで使用される文字列のエンコーディングは以下の通りです:

  • C, C++

    UTF-8

  • Java, Kotlin, Objective-C, C#

    UTF-16

  • Swift

    UTF-16 または UTF-8, Swiftドキュメント を参照