我的代码中有几个调试函数,当指定了构建标志-release时,调用全部替换为NULL(性能);例如:
self.condition ? NULL : NULL;
其中第一个和第二个NULL是在预处理中被替换的函数调用。
我的问题是这个编译的内容,如果有的话?我正在使用Apple的LLVM 5.1;显然对我们来说这是一个无操作,所以这意味着它不会产生这条线的指令吗?我希望这样,因为没有充分的理由去实际执行任何事情。
答案 0 :(得分:1)
我猜它会依赖于背景。
由于self.condition
是[self condition]
的别名,因此只有在编译器可以肯定断言[self condition]
没有副作用的情况下才能省略调用。如果编译器无法建立没有副作用,那么整个语句可以优化为[self condition];
,从而产生轻微的优化。
_condition ? NULL : NULL;
应该被安全地剥离,因为没有相关的方法调用可能产生副作用。