ご存知のように、ARC では__bridge
id を に変換するためにが必要void *
です。
void *t = (void *)self; // ERROR: Cast of ... requires a bridged cast
void *t = (__bridge void *)self; // CORRECT
C 関数呼び出しも同様です。
void f(void *t) {
....
}
f((void *)self); // ERROR
f((__bridge void *)self); // CORRECT
これはメソッドにも当てはまると思います。実際、このBeginning ARC in iOS 5 Tutorialは次の例を示しており、必要であると述べてい__bridge
ます。
MyClass *myObject = [[MyClass alloc] init];
[UIView beginAnimations:nil context:(__bridge void *)myObject];
しかし、今日__bridge
、プログラムの 1 つで誤ってメソッド呼び出しを落としてしまい、コードがコンパイルされ、問題なく実行されました。上記__bridge
のサンプルの は不要のようです。
[UIView beginAnimations:nil context:(void *)myObject]; // COMPILED OK
これは正しいですか?この場合、 は__bridge
本当に不要ですか? またはそれを削除すると、コードの意味が変わりますか?