众所周知,使用 ARC,我们需要 a__bridge
将 id 转换为 a 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
我认为这也应该适用于方法,实际上iOS 5教程中的这个Beginning ARC给出了以下示例,并说__bridge
需要:
MyClass *myObject = [[MyClass alloc] init];
[UIView beginAnimations:nil context:(__bridge void *)myObject];
但是,今天我不小心在我__bridge
的一个程序中的方法调用中删除了一个,并且代码编译并运行没有任何问题。上面示例中的__bridge
似乎是不必要的:
[UIView beginAnimations:nil context:(void *)myObject]; // COMPILED OK
这是正确的吗?__bridge
在这种情况下真的没有必要吗?或者删除它会改变代码的含义?