CoreFoundation __bridge

iOSでCoreFoundationフレームワークのオブジェクトはARCが効かないので自分でCFReleaseする必要がある。FoundationオブジェクトとCoreFoundationオブジェクトをキャストする__bridgeを使えば、代入するときに参照カウントを操作できる。


・id→void*

id x = [[NSObject alloc] init];
void *y = (__bridge void *)x;


__bridge 参照カウントは変わらない。idオブジェクトが破棄されるとvoid*も破棄。
__bridg_retained  参照カウントを+1する。idオブジェクトが破棄されてもvoid*は破棄されない。CFRelease(y)するまで保持し続ける。

__bridge_transfer 参照カウントを-1する。参照カウントが0になり、オブジェクトはすぐに破棄される。(まずコンパイルエラー)

この記事が気に入ったらサポートをしてみませんか?