我们知道,使用ARC我们需要__bridge将id转换为void *:
void *t = (void *)self; // ERROR: Cast of ... requires a bridged cast
void *t = (__bridge void *)self; // CORRECT
Run Code Online (Sandbox Code Playgroud)
C函数调用也是如此:
void f(void *t) {
....
}
f((void *)self); // ERROR
f((__bridge void *)self); // CORRECT
Run Code Online (Sandbox Code Playgroud)
我认为这也适用于方法,事实上,iOS 5 Tutorial中的这个Beginning ARC给出了以下示例,并说__bridge需要:
MyClass *myObject = [[MyClass alloc] init];
[UIView beginAnimations:nil context:(__bridge void *)myObject];
Run Code Online (Sandbox Code Playgroud)
但是,今天我不小心__bridge在我的一个程序中删除了一个方法调用,并且代码编译并运行没有任何问题.在__bridge上面的示例中似乎是不必要的:
[UIView beginAnimations:nil context:(void *)myObject]; // COMPILED OK
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?就是__bridge在这种情况下,实际上是不必要的?或者删除它会改变代码的含义?
我有一个维护工作,有一个巨大的CSS文件,我发现了很多类似的东西:
.xxxx {}
Run Code Online (Sandbox Code Playgroud)
也就是说,一个绝对没有任何内容的选择器.我认为它们没用,但有很多这些我开始怀疑自己.我是对的,可以安全地将它们移除吗?或者他们实际上在做什么,我应该保留它们?