在release版本禁止輸出NSLog內容

前提:在XCode作開發調試時每每須要打印一些調試信息作debug用,你們知道當打印信息的地方多了以後在模擬器上跑可能不會有什麼問題,由於模擬器用的是電腦的硬件可是當應用跑在設備上時這些輸出語句會在很大程度上影響應用的性能,針對這種問題能夠寫一些宏來控制這些調試信息的輸出。


在release版本禁止輸出NSLog內容

由於NSLog的輸出仍是比較消耗系統資源的,並且輸出的數據也可能會暴露出App裏的保密數據,因此發佈正式版時須要把這些輸出所有屏蔽掉。 app

咱們能夠在發佈版本前先把全部NSLog語句註釋掉,等之後要調試時,再取消這些註釋,這實在是一件無趣而耗時的事!還好,還有更優雅的解決方法,就是在項目的prefix.pch文件里加入下面一段代碼,加入後,NSLog就只在Debug下有輸出,Release下不輸出了。 框架


如何實現:

-Prefix.pch(pch全稱是「precompiled header」,也就是預編譯頭文件,該文件裏存放的工程中一些不常被修改的代碼,好比經常使用的框架頭文件,這樣作的目的提升編譯器編譯速度。咱們知道當咱們修改一個工程中某個文件代碼時候,編譯器並非從新編譯全部全部文件,而是編譯改動過文件的,假如pch中某個文件修改了,那麼pch整個文件裏包含的的其餘文件也會從新編譯一次,這樣就會消耗大量時間,因此它裏面添加的文件最好是是不多變更或不變更的頭文件或者是預編譯的代碼片斷;)文件中添加
[plain]  view plain copy
  1. #ifdef DEBUG  
  2. #define NSLog(...) NSLog(__VA_ARGS__)  
  3. #define debugMethod() NSLog(@"%s", __func__)  
  4. #else  
  5. #define NSLog(...)  
  6. #define debugMethod()  
  7. #endif  

上段代碼的意思就是 用宏指令作一個判斷,若是DEBUG爲真,則編譯#ifdef到#endif宏定義,不然編譯器就不編譯; 性能



這個DEBUG在哪設置呢, ui

在 "Target > Build Settings > Preprocessor Macros > Debug" 裏有一個"DEBUG=1"。 spa

設置爲Debug模式下,Product-->Scheme-->SchemeEdit Scheme
設置Build Configuration成Debug時,就能夠打印nslog了。

設置Release,發佈app版本的時候就不會打印了,提升了性能 .net




這樣設置後,只須要在Product ->Scheme->Edit Scheme ->info選擇,是release ,仍是debug版本便可。若是debug 版本,則答應log,若release版本則不打印。 debug

咱們發佈到appstore 上的版本均是release版本,這裏簡單說下這兩個版本的差別。
       release 是發行版本,比debug版本要小一些,他們調用兩個不一樣底層庫,debug 包含的信息多,能夠斷點調試,單步執行,使用使用TRACE/ASSERT等調試輸出語句,
可是release 版本不包含調試信息,運行速度比較快。
另外在此處設置的DEBUG 參數能夠在下面的路徑進行設置:工程->Target->Build Setting ->
Preprocessor Macros。 默認系統已經給出了DEBUG的參數。若是要增長新的參數,則在哪裏進行增長。
相關文章
相關標籤/搜索