现在的位置: 首页 > 综合 > 正文

在宏定义中如何使用一个外部文件的的值来决定宏定义

2018年02月14日 ⁄ 综合 ⁄ 共 940字 ⁄ 字号 评论关闭

这里以一个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);

通过上面这个宏定义,就可以做到在Config.plist中的一个DEBUG值来决定是否使用NBLog进行输出。 如果这里面的值为NO, 则NBlog将不做任何输出。 

使用NBLog和普通的NSLog完全一样。

抱歉!评论已关闭.