[swift-evolution] Unmanaged, and COpaquePointer vs. Unsafe(Mutable)Pointer
Jacob Bandes-Storch
jtbandes at gmail.com
Tue Dec 8 02:26:30 CST 2015
One hopes to avoid COpaquePointer and Unsafe(Mutable)Pointer, but in
practice I've had occasion to use them a few times.
Things that are nice:
- Unmanaged.passUnretained/takeRetained/etc. which make memory management
semantics explicit.
Things I've been frustrated by:
- An API takes UnsafeMutablePointer<Void>, but Unmanaged.toOpaque() returns
a COpaquePointer.
- An API gives me UnsafeMutablePointer<Void>, but Unmanaged.fromOpaque()
takes a COpaquePointer.
In practice, I end up with monstrosities like:
Unmanaged.passRetained(CFCopyDescription(Unmanaged<AnyObject>.fromOpaque(COpaquePointer($0)).takeUnretainedValue()))
I think a few things could help:
- Phase out COpaquePointer in favor of UnsafePointer<Void> (is this already
happening?)
- Add implicit conversion from COpaquePointer to
Unsafe(Mutable)Pointer<Void>, and/or vice versa.
- Even better, add implicit conversion from Unmanaged<T> to COpaquePointer
or UnsafePointer<Void>, behaving the way toOpaque() currently does. Also,
replace Unmanaged.fromOpaque() with an initializer Unmanaged(_:
UnsafePointer<Void>).
What are others' experiences? Would it be feasible/favorable to have some
of these conversions?
Jacob Bandes-Storch
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151208/353afabc/attachment.html>
More information about the swift-evolution
mailing list