UnsafeMutablePointer <UInt8>:风险是什么?

Dan*_*ark 1 unsafe-pointers swift

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

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

另外,Objective-C库正在使用uint8_t *与Swift的桥接器UnsafeMutablePointer<UInt8>......这对于Swift互操作来说是最好的吗?

JAL*_*JAL 5

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

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

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

  • 它也是不安全的,因为指针没有关于它指向的内存块的*size*的信息,并且您可以通过指针轻松访问无效的内存位置. (3认同)