2016-06-22 69 views
1

我從Objective-C庫的回調中收到其中的一個:UnsafeMutablePointer<UInt8>UnsafeMutablePointer <UInt8>:有什麼風險?

我可以解析它。我也可以創建一個將其發回圖書館,但是:使用「不安全」類型有什麼風險?我如何避免這些風險?

另外,Objective-C庫使用的是uint8_t *,它與Swift橋接,因爲這是UnsafeMutablePointer<UInt8> ......這是Swift互操作性最好的事情嗎?

+1

你可以改變ObjC庫,並讓它給NSData? – kennytm

+1

相關閱讀:https://www.reddit.com/r/swift/comments/2q1uhr/unsafe_pointers_objective_c/ – JAL

+0

感謝@kennytm,它更像是「你能說服C人改變他們的lib」。我可能只是把它包起來。 –

回答

5

UnsafeMutablePointer是如何表示Swift中的C指針。這是不安全的,因爲指針指向的底層內存可能隨時在沒有Swift指針知道的情況下更改。它也沒有關於它指向的內存塊大小的信息(感謝Martin)。

如果您的圖書館要求您使用C類型,在這種情況下指向uint8_t的指針,那麼您必須使用UnsafeMutablePointer。否則,如果您只想表示一組數字,我會將所有uint8_t類型的NSArray作爲NSNumber類型(如果您指向字節流,則將其包裝爲NSData)以便於橋接。

您可以通過取消引用指針(如果它不爲零)並將存儲在指針中的值複製到Swift應用程序中的變量來避免這些風險。

+0

謝謝,這是一個問題。 –

+0

在我的無知中,我基本上擔心它會以某種方式呈現泄漏。 –

+3

它也是不安全的,因爲指針沒有關於它指向的內存塊的* size *的信息,並且可以通過指針輕鬆訪問無效的內存位置。 –

相關問題