条件NSLog,不降低性能

2 debugging cocoa objective-c nslog

bool kDebuggingEnabled = NO;
...
for(i=0; i<length; i++){
 ...
 if (kDebuggingEnabled) {
  NSLog (@"Value of variable # %i",$resultingOptions);
 }
}
Run Code Online (Sandbox Code Playgroud)

每当我的应用程序处于活动状态时,我的代码每次都会检查NSLog的状态.有没有更好的方法来提高我的代码的性能?

mtt*_*trb 5

您可以使用预处理器宏来打开和关闭日志记录.一个很好的例子是DLogMarcus Zarra在Cocoa上的宏是我的女朋友博客.

#ifdef DEBUG
    #define DLog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
#else
    #define DLog(...) do { } while (0)
#endif
Run Code Online (Sandbox Code Playgroud)

您可以将上面的内容放在prefix.pch文件中,然后简单地用NSLog语句替换DLog语句.您还需要确保DEBUG在调试版本配置中设置了该值.

使用这样的预处理器宏意味着日志代码不会被编译到您的发布版本中,因此日志语句没有性能损失.

博客文章还包含一些其他有用的宏来处理断言.