UnsafeMutablePointer<UInt8>:有什么风险?

UnsafeMutablePointer<UInt8>: What's the risk?

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

我可以解析它。我也可以创建一个将其送回图书馆,但是:使用 "unsafe" 类型有什么风险?我该如何规避这些风险?

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

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

如果您的库要求您使用 C 类型,在本例中是指向 uint8_t 的指针,那么您必须使用 UnsafeMutablePointer。否则,如果你只想表示一个数字数组,我会将所有 uint8_t 类型包装在 NSArray 中作为 NSNumber 类型(或者 NSData 如果你指向字节流)以便于桥接。

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