UnsafeMutablePointer <uint8>:风险是什么?

时间:2016-06-22 15:18:56

标签: swift unsafe-pointers

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

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

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

1 个答案:

答案 0 :(得分:5)

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

如果您的库要求您使用C类型,在这种情况下是指向uint8_t的指针,那么您必须使用UnsafeMutablePointer。否则,如果您只想表示一组数字,我会将uint8_t类型中的所有NSArray类型包裹为NSNumber类型(如果您指向NSData,则为TabPage一个字节流),以便更轻松地进行桥接。

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