先說為什么要用這個宏,當一個工程可能根據需求需要需要接入不同的渠道款青,而每個渠道的大部分代碼相同的時候,就可以通過建立不同的target來解決這個問題,這是后就可以在每個target設置對應的預編譯宏吏够,這樣可以在一些公用代碼文件中通過宏來區(qū)分代碼的用處。
如何使用Preprocessor Macros
先準備一個兩個Target的工程模擬一下需求
首先我們創(chuàng)建一個Dmeo滩报,給Demo的target copy一個target锅知。選中Demo的Target?
+D
拷貝一個Target
圖1
將復制的target改為TargetTest
圖2
復制target后xcode會自動復制一個對應的info.plist,將復制的plist文件改一個對應的名字
圖3
點擊TargetTest
target選擇General
->Choose info.plist File...
選中剛才的plist
圖4
更改Scheme,點擊Manage Schemes
將TargetTest
的Scheme改成TargetTest
.
以上改名只是為了好區(qū)分 <( ̄︶ ̄)>
準備工作做完脓钾。
給TargetTest
設置對應的宏
選中TargetTest
售睹,點擊Build Settings
選擇Preprocessor Macros
給TargetTest
增加一個對應的宏TARGETTEST
圖5
好了,這樣宏就設置好了可训,可以在代碼中使用了??
使用宏
在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]>