> On Nov 15, 2017, at 00:48 , Quinn The Eskimo! via swift-users
> <[email protected]> wrote:
>
>
> On 15 Nov 2017, at 04:16, Rick Mann via swift-users <[email protected]>
> wrote:
>
>> Is UnsafeMutablePointer<> not memory managed?
>
> It is not. Specifically, the code you posted creates a copy of the data and
> then never destroys it.
Hmm. So it should leak, not crash. I wonder what I'm doing wrong.
> If I were in your shoes I’d construct a `Data` value from the unsafe pointer
> and then pass that around.
>
> let source = Data(bytes: inSourceBuffer, count: inSourceBufferLength)
> self.queue.async {
> let size = source.count
> source.withUnsafeBytes { (p: UnsafePointer<UInt8>) in
> self.foo(data: p, length: size)
> }
> }
>
> The main drawback to this is that you have to jump through the hoops to
> access the data unsafely. It might be easier to recast your consumer (the
> `foo(…)` method) in terms of `Data`. That’s what I generally do when I work
> with foreign APIs like this, that is, keep the data in ‘Swift space’ and only
> deal with foreign types at the boundaries.
>
> Whether that makes sense here really depends on the specifics of your
> program. For example, if your program has lots of this boundary code, it
> might be nicer to just stick with the foreign type. Or build a specific
> wrapper that makes it easier to do this conversion.
Thanks. I have to call this code from Objective-C, passing a pointer and length
(which is how I get the raw data). I could create CGImages from that, and I
might, since eventually the consumer will be implemented in Metal 2. But right
now, I just have to get back to the raw data to do the processing, so it seemed
like extra work to create a CGImage.
--
Rick Mann
[email protected]
_______________________________________________
swift-users mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-users