LLVM是否会在可能的情况下自动将Objective-C方法转换为内联函数?
(即,为一块代码创建一个Objective-C方法,你可以在其他方式粘贴内联吗?)
如果LLVM不执行此优化,为什么不呢?如果是,(a)是否有必须为此设置的某些构建设置?(b)如何判断是否内联Objective-C方法?
您可以将函数声明为如下内联:
#ifdef DEBUG
void DPrintf(NSString *fmt,...);
#else
inline void DPrintf(NSString *fmt,...) {}
#endif
Run Code Online (Sandbox Code Playgroud)
因此,当您不在DEBUG中时,该功能不会产生任何成本,因为它已经过优化和内联.如果你想拥有相同的东西但是对于类方法怎么办?
我的类声明如下:
@interface MyClass : NSObject {
}
+ (void)DPrintf:(NSString *)format, ...;
// Other methods of this class
@end
Run Code Online (Sandbox Code Playgroud)
我想将' DPrintf'转换为类似的东西,inline以便调用该方法没有成本.
但我不能这样做:
inline +(void)DPrintf:(NSString *)format, ...; {}
Run Code Online (Sandbox Code Playgroud)
如何为非调试编译关闭类的零成本静态方法?