[webkit-dev] Great function for Cocoa platform, bridge_cast
Darin Adler
darin at apple.com
Tue Feb 15 09:43:58 PST 2022
Hi folks.
For those of you doing work with Objective-C on Cocoa platforms, I want to draw your attention to a great new idiom. Back in October, David Kilzer added bridge_cast, a type-safe set of functions that convert an Objective-C pointer to a Core Foundation pointer or vice versa, preserving types across the toll-free bridging boundary. It’s better than traditional non-WTF idioms where you use casts that look like “(__bridge id)” because you don’t have to write the type, and the correct corresponding type is chosen for you.
When you have a CFStringRef and need to use it as an NSString key and value in an Objective-C dictionary, for example, the idiom would be:
bridge_cast(constantKey): bridge_cast(constantValue),
Rather than the old:
(__bridge id)constantKey: (__bridge id)constantValue,
It converts to NSString *, not id, which is better for many contexts, and good here, too. Since the function works in both directions, it will also turn an NSDictionary into a CFDictionaryRef. And it works on both raw pointers and on RetainPtr. I find it’s even more welcome to have something that can convert a RetainPtr<CFDictionaryRef> into RetainPtr<NSDictionary> without danger of getting the reference counting wrong, doing the right thing in both ARC and non-ARC source files, and optimizing the move cases appropriately.
Please consider this instead of writing things like (CFStringRef)keyNS.get() because it’s easier to see it’s correct.
— Darin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20220215/cf87e191/attachment.htm>
More information about the webkit-dev
mailing list