toll-free bridge

NSURL と CSURLRef の相互変換ってどーするんだろ?と Quartz で PDF 操作しているときにちょいと調べた。結論は「変換」でなく「キャスト」で OK :-)

> Hello, I have been googling on how to convert a CFURLRef to NSURL.
> But it always seems to be the oposite that people are searching for.
Just cast it. CFURL and NSURL are toll-free bridged.

Convert CFURLRef to NSURL

ときどきこーゆー変換を見てたけど、toll-free bridge って呼び方があったんだね。知らなかった。 :-)

Toll-free bridgeとは、CocoaのFoundationに含まれるクラスと、Core Foundationが持つオブジェクトの間でオブジェクトの互換性を持たせる仕組みである。明示的な変換を行う事なく、キャストするだけで、同じオブジェクトをObjective-CでもCでも使う事ができる。さらに言えば、キャストは単にコンパイルを通すために必要なだけで、警告を無視すればキャストすら必要はない。

Toll-free bridge - 変換コスト0のブリッジ

toll-free bridge のイロハや発生の経緯はマイナビニュースの記事(38)が分かりやすいし、使い方は(33)が分かりやすい。その他もいろいろ勉強になるなぁ、マイナビニュース。ちゃんと読んどこ :-)