你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS .pch

IOS .pch

編輯:IOS開發綜合

當我們新建一個工程的時候,在Supporting FIles文件下會看到一個以 -Prefix.pch結尾文件的文件,pch全稱是“precompiled header”,也就是預編譯頭文件,該文件裡存放的工程中一些不常被修改的代碼,比如常用的框架頭文件,這樣做的目的提高編譯器編譯速度。我們知道當我們修改一個工程中某個文件代碼時候,編譯器並不是重新編譯所有所有文件,而是編譯改動過文件的,假如pch中某個文件修改了,那麼pch整個文件裡包含的的其他文件也會重新編譯一次,這樣就會消耗大量時間,所以它裡面添加的文件最好是是很少變動或不變動的頭文件或者是預編譯的代碼片段;


在新建一個工程時,pch後綴文件裡代碼是

[cpp] view plaincopy
  1. #import
  2. #ifndef __IPHONE_4_0
  3. #warning "This project uses features only available in iOS SDK 4.0 and later."
  4. #endif
  5. #ifdef __OBJC__
  6. #import
  7. #import
  8. #endif 工程有Debug Version和Release Version,Debug Version是程序開發過程中版本,它包含了所有調試信息,一些常用的NSLog打印日志,在程序調試過程工根據我們設置的調試信息可以看出什麼地方出錯,我們在運行運行一個小程序的時候,會不會首先就想到進行斷點調試呢,應該是首先想著NSLog一下,看看哪個函數方法沒執行,看看是不是哪個數組的值沒取出來。Release Version是發布版本,不打印NSLog可以加快程序運行速度,減少內存使用。 但是到一個大工程中,會有很多很多這樣的NSLog,在我們工程完美運行的時候,發布Release 版本的時候,難道我們去一行行的注釋調NSLog嗎?假如工程現在原來基礎上發布一個version 1.2版本的,我們在修改程序的時候豈不是還把原來注釋給取消,那就很麻煩很麻煩了。

    所以,此處用到了宏指令


    上段代碼的意思就是 用宏指令做一個判斷,如果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


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved