1

Objective-C ライブラリからのコールバックで次のいずれかを受け取りました。UnsafeMutablePointer<UInt8>

私はそれを解析することができます。ライブラリに送り返すために作成することもできますが、「安全でない」タイプを使用するリスクは何ですか? これらのリスクを回避するにはどうすればよいですか?

また、Objective-C ライブラリはuint8_t *、Swift へのどのブリッジを使用していUnsafeMutablePointer<UInt8>ますか?これは Swift 相互運用に最適ですか?

4

1 に答える 1

5

UnsafeMutablePointerSwiftでCポインターを表現する方法です。ポインタが指している基になるメモリは、Swift ポインタが知らないうちにいつでも変更される可能性があるため、安全ではありません。また、それが指すメモリ ブロックのサイズに関する情報もありません (Martin さんに感謝)。

ライブラリで C 型 (この場合は へのポインター) を使用する必要がある場合は、 を使用するuint8_t必要がありますUnsafeMutablePointer。それ以外の場合は、数値の配列を表現したいだけの場合は、ブリッジを容易にするために、すべてのuint8_t型をNSArrayasNSNumber型 (またはNSDataバイト ストリームを指している場合) でラップします。

これらのリスクは、ポインターを逆参照し (非 nil の場合)、ポインターに格納されている値を Swift アプリケーションの変数にコピーすることで回避できます。

于 2016-06-22T15:23:48.817 に答える