我從Objective-C庫的回調中收到其中的一個:UnsafeMutablePointer<UInt8>
UnsafeMutablePointer <UInt8>:有什麼風險?
我可以解析它。我也可以創建一個將其發回圖書館,但是:使用「不安全」類型有什麼風險?我如何避免這些風險?
另外,Objective-C庫使用的是uint8_t *
,它與Swift橋接,因爲這是UnsafeMutablePointer<UInt8>
......這是Swift互操作性最好的事情嗎?
我從Objective-C庫的回調中收到其中的一個:UnsafeMutablePointer<UInt8>
UnsafeMutablePointer <UInt8>:有什麼風險?
我可以解析它。我也可以創建一個將其發回圖書館,但是:使用「不安全」類型有什麼風險?我如何避免這些風險?
另外,Objective-C庫使用的是uint8_t *
,它與Swift橋接,因爲這是UnsafeMutablePointer<UInt8>
......這是Swift互操作性最好的事情嗎?
UnsafeMutablePointer
是如何表示Swift中的C指針。這是不安全的,因爲指針指向的底層內存可能隨時在沒有Swift指針知道的情況下更改。它也沒有關於它指向的內存塊大小的信息(感謝Martin)。
如果您的圖書館要求您使用C類型,在這種情況下指向uint8_t
的指針,那麼您必須使用UnsafeMutablePointer
。否則,如果您只想表示一組數字,我會將所有uint8_t
類型的NSArray
作爲NSNumber
類型(如果您指向字節流,則將其包裝爲NSData
)以便於橋接。
您可以通過取消引用指針(如果它不爲零)並將存儲在指針中的值複製到Swift應用程序中的變量來避免這些風險。
謝謝,這是一個問題。 –
在我的無知中,我基本上擔心它會以某種方式呈現泄漏。 –
它也是不安全的,因爲指針沒有關於它指向的內存塊的* size *的信息,並且可以通過指針輕鬆訪問無效的內存位置。 –
你可以改變ObjC庫,並讓它給NSData? – kennytm
相關閱讀:https://www.reddit.com/r/swift/comments/2q1uhr/unsafe_pointers_objective_c/ – JAL
感謝@kennytm,它更像是「你能說服C人改變他們的lib」。我可能只是把它包起來。 –