我们假设我在课堂上有这样的方法:
- (void)doSomethingOnlyWhenNeeded {
#ifdef NEEDED
DO SOMETHING
#endif
}
如果我定义了NEEDED,一切都OK。但如果没有定义NEEDED,方法是空的,我希望它被删除。是否有任何优化可以删除对这些空方法的调用?如果没有,为什么这可能是一个坏主意?如果是,那么我对此有何控制权?
在哪里可以找到有关此功能的文档?
答案 0 :(得分:2)
在编译期间不会删除它们,这可以是一种覆盖超类方法的方法,并且无论子类方法的内容如何都会停止调用该方法,这就是我假设该方法持续存在的方式没有内容。
答案 1 :(得分:0)
为什么不在可能调用函数时也使用#ifdef NEEDED
?
或者,您可以使用块。首先,您可以声明块:
void (^someBlock)(void);
然后根据需要创建
#ifdef NEEDED
someBlock = ^{
//do something
};
#endif
调用它时,您可以这样做:
if (someBlock)
someBlock();
如果该块不存在,则不会调用该块。
答案 2 :(得分:0)
不,我不相信那些会被优化掉。现在,这不是一个巨大的问题,除非经常被称为荒谬。如果你处于一个非常紧凑的循环中,那么你应该把条件放在发送消息而不是方法内部。
但基本上,如果你没有注意到你的应用程序运行缓慢并且已经通过Instruments指出了这种方法,那么就做你正在做的事情并转向更重要的编码问题。 :)
答案 3 :(得分:0)
也许我错过了一些东西,但为什么不把方法本身包装在预处理器块中,例如。
#ifdef NEEDED
- (void)doSomethingOnlyWhenNeeded {
DO SOMETHING
}
#endif
那里,方法现在不再存在了。 : - )