[swift-users] NSData and UnsafePointer
Andrew Trick
atrick at apple.com
Sat Jul 16 15:16:33 CDT 2016
> On Jul 16, 2016, at 5:28 AM, J.E. Schotsman via swift-users <swift-users at swift.org> wrote:
>
> A mysterious bug has got me thinking about using UnsafePointer<CChar> with NSData (Swift 2).
>
> Is this safe:
>
> let data:NSData = …
> let dataStart = UnsafePointer<CChar>(data:NSDAta.bytes)
>
> myProcessdata1(dataStart,data.length)
>
> … (no more references to data)
I don’t know what the recommended idiom is or if the syntax has changed from Swift 2 to 3, but I would do something like this:
withExtendedLifetime(data) {
let dataStart = UnsafePointer<CChar>(data.bytes)
myProcessdata1(dataStart,data.length)
}
UnsafePointers aren’t meant to keep things alive.
There’s also the problem of potentially casting your UnsafePointer to something other than CChar, but that’s not really the issue at hand.
> And this:
>
> let data:NSData = …
> myProcessdata2(data)
>
> … (no more references to data)
>
> func myProcessdata2( data:NSData )
> {
> let dataStart = UnsafePointer<CChar>(data:NSData.bytes)
> myProcessdata1(dataStart,data.length)
> }
>
> In the latter case I would hope that data remains alive until the function myProcessdata2 returns. But does it?
I think the latter case has the same problems as the former.
-Andy
>
> TIA,
>
> Jan E.
>
>
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
More information about the swift-users
mailing list