版权归Aaidong所有〜转载需声明〜 原贴地地址:http://blog.youkuaiyun.com/aaidong/article/details/53425773
应用场景:1、根据是真机还是模拟器来指定宏的不同定义;2、设置不同的宏,实现不同Target版本的判断。
实例一:重写NSLog。
// 重写NSLog,Debug模式下打印日志和当前行数
#if DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"\nfunction:%s line:%d content:%s\n", __FUNCTION__, __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(FORMAT, ...) nil
#endif
实例二: debug模式下用测试的服务器网址,而release模式下,则使用线上正式服务器。
1、定义一个宏
#if PROD == 1
// 正式服务器地址
const NSString * const SERVER_URL = @"http://www.abc.com/";
#else
// 测试服务器地址
const NSString * const SERVER_URL = @"http://beta.testAbc.com/";
#endif
2、进入'Build Settings' ->搜索'PreprocessorMacros’然后如图所示进行设置
3、随后,可以进行测试。在debug模式下,进行测试打印结果为:
http://beta.testAbc.com/
在Release模式下测试,(Edit Scheme->Run->Info->Build Configuration,把它改成Release) 运行,打印结果为:
http://www.abc.com/
实例三:Target 中 Preprocessor Macros 设置不同的宏,实现不同Target版本的判断。(设置同二,Debug和Release可以设置相同的宏名称,不同值得宏)
假如设置如下,(注意“=”前后不要有空格,否则编译不过)
target A:TARGET_VERSION=1 表示老师版本 debug
target A:TARGET_VERSION=2 表示老师版本 release
target B:TARGET_VERSION=3 表示学生版本 debug
target B:TARGET_VERSION=4 表示学生版本 release
然后在有版本差异的地方:
#if TARGET_VERSION == 1
//...
#elif TARGET_VERSION == 2
//...
#elif TARGET_VERSION == 3
//...
#elif TARGET_VERSION == 4
//...
#endif