我有一个特殊的日志记录功能,我们称它为JLog()是为了跟踪日志记录数据而编写的,但仅当在模拟器和测试设备上进行测试时才如此。我在Xcode项目中设置了DEBUG预处理程序标志,仅针对开发模式设置,而不在生产环境中设置。 JLog()使用它来知道是否输出日志消息。它看起来像这样:

void JLog(NSString *message) {
#ifdef DEBUG
    NSLog(@"%@", message);
#endif
}


我用它代替了用NSLog()包裹所有#ifdef DEBUG调用-它使我的代码更易于阅读且不易出现错误。

问题在于,即使该应用程序未在生产环境中打印日志消息,它仍需要构造传递给JLog()的消息-有时价格昂贵,并且经常占用大量内存。例如,如果我有这样的代码:

NSError *error = <something>;
JLog([NSString stringWithFormat:@"Error: %@", error);


...然后,该应用程序被迫分配一个NSString,将NSString修饰的错误版本插入其中,然后将其传递给JLog()-对此无能为力。这对我来说似乎很浪费。

我想做的是,以某种方式指示Xcode不要在生产中编译JLog()代码。这样,上面构造错误消息的示例之类的代码无论如何都不会最终被输出到日志中,根本就不需要调用它。我怎样才能做到这一点?

最佳答案

更换您的

void JLog(NSString *message) {
#ifdef DEBUG
    NSLog(@"%@", message);
#endif
}




#ifdef DEBUG
void JLog(NSString *message) {
    NSLog(@"%@", message);
}
#else
#define JLog(args) {}
#endif

关于ios - 标记Xcode根本不编译某些方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20329877/

10-11 14:24