这里以一个NSLog的宏定义来进行举例。
在Debug模式下, 我们需要NSLog的输出信息。 而在Release情况下,为了不影响程序性能, 需要关闭NSLog的输出。
这种情况下, 我们可以使用
#ifndef __OPTIMIZE__
# define NBLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
# define NBLog(...) {}
#endif
来进行Debug和Release的分支处理。
另一种情况是, 不管是Debug或者Release, 我们都需要一个参数来决定是否输出Log。 比如在开发一个SDK时,尤其重要。
在使用这个SDK时,可以使用一个plist文件中的一个参数来决定该SDK是否输出LOG信息, 即是否输出log信息依赖于外部的一个文件中的值决定。
# define InDevelop ([[NSFileManager defaultManager] fileExistsAtPath:[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Config.plist"] isDirectory:NO]?([[[NSDictionary dictionaryWithContentsOfFile:[[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Config.plist"]] objectForKey:@"DEBUG"] boolValue]):NO)
# define NBLog(fmt, ...) do { \
if (InDevelop) {\
NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);\
}\
} while (0);
使用NBLog和普通的NSLog完全一样。