我有一个特殊的日志记录函数,我们称它为 JLog()
,我编写它是为了跟踪日志记录数据,但仅限于在模拟器和我的测试设备上进行测试时。我在我的 Xcode 项目中设置了一个 DEBUG 预处理器标志,只为开发模式设置,而不是在生产模式中设置。 JLog()
使用它来知道是否输出日志消息。它看起来有点像这样:
void JLog(NSString *message) {
#ifdef DEBUG
NSLog(@"%@", message);
#endif
}
我使用它而不是用 #ifdef DEBUG
包装我所有的 NSLog()
调用 - 它使我的代码更易于阅读并且更不容易出现错误。
问题是,即使应用程序在生产环境中不打印日志消息,它仍然需要构建传递给 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/