(知らなかったのでメモ。。)
ARC環境下では、キャスト時に__bridge
がないと怒られる。
例:NSURL * から CFURLRef にキャスト
CFURLRef url = (__bridge CFURLRef)[NSURL URLWithString:@"path"]
理由
NS〜とかObjective-CのオブジェクトはARC対象だけど CoreFoundationは対象外だから。
上のCFURLRef url
は、
NSURLのオブジェクトがなくなる時(スコープ外に出る)まで有効。
変数の中にアドレスが残っていたとしてもアクセスしてはだめ。
O-Cオブジェクトが破棄された以後もCFオブジェクトを使用したい時は、 retainやオーナーシップ権を委譲するbridgeキャストがある。
参考
http://natsuapps.com/note/2011/11/ios5-arc-autorelease-bridge-xcode.html