Jon*_*son 5 methods inline 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)
如何为非调试编译关闭类的零成本静态方法?
小心.Objective-C方法与C函数不同.Objective-C方法由编译器转换为objc_msgSend()函数调用; 您无法控制方法是否内联,因为这是无关紧要的.您可以在此处阅读有关Objective-C运行时的更多信息(Objective-C运行时编程指南),此处(Objective-C运行时参考)和此处(CocoaSamurai帖子),快速Google搜索应该会提供更多信息.
Objective-C中没有静态方法.只有类方法,它们就像实例方法一样,除了它们属于一个类.这意味着,就像实例方法一样,发送给类的消息必须通过消息调度机制来确定要调用的正确方法,并且这是在运行时完成的.您可以内联对方法调度机制的调用,但是如果没有目前任何Objective-C编译器中不存在的疯狂级别的优化,方法体仍然无法内联.
无论如何,这是微观优化.如果剖析显示它是必要的(它几乎不会),那么你可以通过体操.否则,请担心应用程序中的实际性能问题.