1

我在来自 Objective-C 库的回调中收到其中一个:UnsafeMutablePointer<UInt8>

我能够解析它。我也可以创建一个将其发送回图书馆,但是:使用“不安全”类型有什么风险?我如何避免这些风险?

此外,Objective-C 库正在使用uint8_t *哪些到 Swift 的桥,因为这UnsafeMutablePointer<UInt8>……这是 Swift 互操作的最佳选择吗?

4

1 回答 1

5

UnsafeMutablePointer是如何在 Swift 中表示 C 指针。这是不安全的,因为指针指向的底层内存可能随时更改,而 Swift 指针不知道。它也没有关于它指向的内存块大小的信息(感谢 Martin)。

如果您的库要求您使用 C 类型,在这种情况下是指向 a 的指针uint8_t,那么您必须使用UnsafeMutablePointer. 否则,如果您只想表示一个数字数组,我会将所有uint8_t类型包装在NSArrayasNSNumber类型中(或者NSData如果您指向字节流)以便于桥接。

您可以通过取消引用指针(如果它不是 nil)并将存储在指针处的值复制到 Swift 应用程序中的变量来避免这些风险。

于 2016-06-22T15:23:48.817 回答