我們知道,與ARC我們需要一個__bridge
一個ID轉換爲void *
:__bridge方法參數不需要?
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
真的不必要嗎?或者刪除它會改變代碼的含義?
非常有趣,很好的發現。 +1,因爲你給了我又一個憎恨ARC的理由;-) – 2014-01-26 20:48:50