先说为什么要用这个宏,当一个工程可能根据需求需要需要接入不同的渠道,而每个渠道的大部分代码相同的时候,就可以通过建立不同的target来解决这个问题,这是后就可以在每个target设置对应的预编译宏,这样可以在一些公用代码文件中通过宏来区分代码的用处。
如何使用Preprocessor Macros
先准备一个两个Target的工程模拟一下需求
首先我们创建一个Dmeo,给Demo的target copy一个target。选中Demo的Target⌘
+D
拷贝一个Target
将复制的target改为TargetTest
复制target后xcode会自动复制一个对应的info.plist,将复制的plist文件改一个对应的名字
点击TargetTest
target选择General
->Choose info.plist File...
选中刚才的plist
更改Scheme,点击Manage Schemes
将TargetTest
的Scheme改成TargetTest
.
以上改名只是为了好区分 <( ̄︶ ̄)>
准备工作做完。
给TargetTest
设置对应的宏
选中TargetTest
,点击Build Settings
选择Preprocessor Macros
给TargetTest
增加一个对应的宏TARGETTEST
好了,这样宏就设置好了,可以在代码中使用了😁
使用宏
在ViewController.m文件中写下如下代码测试
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self doSomethings];
}
- (void)doSomethings
{
#if TARGETTEST
[self test_targetTest];
#else
[self test];
#endif
}
#if TARGETTEST
- (void)test_targetTest
{
NSLog(@"调用了<%s>",__func__);
}
#else
- (void)test
{
NSLog(@"调用了<%s>",__func__);
}
#endif
@end
分别选中不同的Target运行
MacroDemo运行如下:
MacroDemo[2886:115549] 调用了<-[ViewController test]>
TargetTest运行如下:
TargetTest[2909:116783] 调用了<-[ViewController test_targetTest]>