PCH文件以及啟動界面的設置

啟動界面的設置

啟動界面由Xcode5的圖片文件到Xcode6的xib文件到Xcode7的storyboard文件。

應用的啟動界面是必須要設置的,如果不設置,在屏幕的上下就會出現黑色。可視范圍跟啟動界面有關,如果沒有設置啟動文件,默認可視范圍就是iPhone4和4s的尺寸,也就是為什么會出現黑色的原因。如果設置了啟動文件,那么默認就是當前模擬器/真機的尺寸。

啟動界面在LaunchScreen.storyboard中設置,在這個文件中需要一個UIViewController類型的控制器并且設置為根控制器。

當應用啟動界面要顯示的時候,會把LaunchScreen.storyboard中的控制器截屏生成圖片來作為APP的啟動界面。

PCH文件

之前版本的?Xcode默認會創建pch文件,Xcode6以后則不會自動創建,需要我們自己創建。

  • PCH文件的創建: File -> New -> File... -> other -> PCH文件
  • PCH文件的作用:Xcode會提前編譯PCH文件,并且在每個文件中都拷貝PCH文件的內容。利用這一特點,我們可以在PCH文件里存放一些公用的宏存放一些頭文件以及自定義一些有用的宏(后面舉例)
PCH文件創建之后,我們需要位置PCH文件才能讓它發揮作用。
  • 如何配置: Build Settings -> 找到Apple LLVM…(或者搜索prefix) -> 將Precompile Prefix Header設置為YES

    接下來需要在Prefix Header中寫入PCH文件的路徑,注意默認PCH文件這個路徑與項目文件處于同一層級,也就是說Xcode從項目文件的目錄開始查找PCH文件,所以在這里只需要寫項目名稱/文件名稱.pch而不用寫全路徑。

  • PCH文件的應用舉例:

    • 在PCH文件中存放宏就是正常的創建,這里不舉例了。

    • 在PCH文件中存放頭文件經常用于分類,比如我們給UIColor增加了一個分類,并且希望在多個文件中使用這個分類,那么就可以在PCH文件中導入此分類的頭文件。

    • 在PCH文件中自定義一些有用的宏,比如代替NSLog:

      #define JYLog(...)  NSLog(__VA_ARGS__)
      

      我們知道NSLog耗費性能,在調試階段完成后需要將NSLog都刪除掉,但是隨著文件的增多,NSLog則不好控制,每一個都去找很浪費時間。

      此時我們可以利用宏來完成自動開啟/關閉NSLog的功能。

      #ifdef DEBUG
      
      // 調試階段
      #define JYLog(...)  NSLog(__VA_ARGS__)
      
      #else
      
      // 發布階段
      #define JYLog(...)
      
      #endif
      

      當處于調試階段,JYLog的作用相當于NSLog,而在發布階段則JYLog的作用相當于空。這樣用JYLog代替NSLog就可以完成之前我們希望做的。

      DEBUG的值會隨著Xcode中的設置改變而改變。

      Edit Scheme -> Run -> Info -> Build Configuration.

      Debug代表調試階段。

      Release代表發布階段。

      但是如果這樣做可能有潛在的危險。前面說過PCH文件的內容會拷貝到每個文件,所以如果此時我們創建一個.c文件,在這個文件中同樣會拷貝PCH中的內容,如果PCH文件中出現C語言不能識別的,那么很明顯會出錯。

      我們希望PCH文件只在Objective-C的范圍內有效(OC文件內拷貝PCH文件內容),所以需要再進行判斷:

      #ifdef __OBJC__
      
      #ifdef DEBUG
      
      // 調試階段
      #define JYLog(...)  NSLog(__VA_ARGS__)
      
      #else
      
      // 發布階段
      #define JYLog(...)
      
      #endif
      
      #endif
      

      至此才能保證正確使用。

因為PCH文件的內容會拷貝到每一個文件中,即使這個文件并未用到PCH文件的內容。所以在使用PCH文件的時候要慎重,這可能也是Apple不再默認創建它的原因吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容