先說為什么要用這個宏,當一個工程可能根據需求需要需要接入不同的渠道,而每個渠道的大部分代碼相同的時候,就可以通過建立不同的target來解決這個問題,這是后就可以在每個target設置對應的預編譯宏,這樣可以在一些公用代碼文件中通過宏來區分代碼的用處。
如何使用Preprocessor Macros
先準備一個兩個Target的工程模擬一下需求
首先我們創建一個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
.
以上改名只是為了好區分 <( ̄︶ ̄)>
準備工作做完。
給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]>