【发布时间】:2014-02-17 03:46:27
【问题描述】:
我们知道,使用 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,并且代码编译并运行没有任何问题。上面示例中的__bridge 似乎是不必要的:
[UIView beginAnimations:nil context:(void *)myObject]; // COMPILED OK
这是对的吗?在这种情况下,__bridge 真的不需要吗?或者删除它会改变代码的含义?
【问题讨论】:
标签: ios objective-c automatic-ref-counting bridge