swift - 不安全可变指针<UInt8> : What's the risk?

标签 swift unsafe-pointers

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

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

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

最佳答案

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

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

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

关于swift - 不安全可变指针<UInt8> : What's the risk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972175/

相关文章:

swift - 将 C char 数组(不安全指针)转换为 String

swift - 为什么 Swift "Managed.fromOpaque.takeUnretainedValue()"保留值?

ios - Swift 4 保存从App中查询到的背景色

ios - 如何在 iOS8 键盘扩展中检测 iPad 方向

ios - 从 Swift 数组中随机选择一个项目而不重复

ios - 'NSError' 在 Swift 中不能转换为 '@lvalue inout $T9'

swift - 如何通过引用将 UnsafePointer<UInt8> 传递给 C API?

go - 如何访问未导出的结构字段

arrays - 无法使用 Swift 4.0 将检索到的 JSON 复制到简单的整数数组中

c - 在 Swift 中将 "char path[MAX]"的地址传递给 "const char*"的参数的最佳方法