當我們新建一個工程的時候,在Supporting FIles文件下會看到一個以 -Prefix.pch結尾文件的文件,pch全稱是“precompiled header”,也就是預編譯頭文件,該文件裡存放的工程中一些不常被修改的代碼,比如常用的框架頭文件,這樣做的目的提高編譯器編譯速度。我們知道當我們修改一個工程中某個文件代碼時候,編譯器並不是重新編譯所有所有文件,而是編譯改動過文件的,假如pch中某個文件修改了,那麼pch整個文件裡包含的的其他文件也會重新編譯一次,這樣就會消耗大量時間,所以它裡面添加的文件最好是是很少變動或不變動的頭文件或者是預編譯的代碼片段;
在新建一個工程時,pch後綴文件裡代碼是
[cpp] view plaincopy
所以,此處用到了宏指令
上段代碼的意思就是 用宏指令做一個判斷,如果DEBUG為真,則編譯#ifdef到#endif宏定義,否則編譯器就不編譯;
這個DEBUG在哪設置呢,
在 "Target > Build Settings > Preprocessor Macros > Debug" 裡有一個"DEBUG=1"。
現在我們來做一個測試:
取一個宏指令放到OSAppDelegate.m的application:didFinishLaunchingWithOptions:方法中,並用同一個NSLog做一個對比;<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+CjwvcD4KPHAgY2xhc3M9"p1"> NSLog(@"%s", __func__);
debugMethod();
首先設置為Debug模式下,Product-->Edit Scheme
跳轉到這個界面
當我設置Build Configuration成Debug時,打印效果圖
當我設置Build Configuration成Release的,打印時效果圖
當Run Test Profile Analyze Archive的時候,都可以根據需要設置Debug和Release兩個模式運行;
所以我們完全可以用一個宏指令來設置是否打印調試信息;
#ifdef DEBUG // 調試階段
#define ZPLog(...) NSLog(__VA_ARGS__)
#else // 發布階段
#define ZPLog(...)
#endif