由於NSLog的輸出仍是比較消耗系統資源的,並且輸出的數據也可能會暴露出App裏的保密數據,因此發佈正式版時須要把這些輸出所有屏蔽掉。app
一:咱們能夠在發佈版本前先把全部NSLog語句註釋掉,等之後要調試時,再取消這些註釋,這實在是一件無趣而耗時的事!還好,還有更優雅的解決方法,就是在項目的prefix.pch文件里加入下面一段代碼,加入後,NSLog就只在Debug下有輸出,Release下不輸出了。框架
#ifndef __OPTIMIZE__ #define NSLog(...) NSLog(__VA_ARGS__) #else #define NSLog(...) {} #endif
二:網上還看到有一種寫法性能
#ifdef DEBUG //調試階段 #define MYLog(...) NSLog(__VA_ARGS__) #else //發佈階段 #define MYLog(...) #endif
這個DEBUG在哪設置呢ui
三:debug
在-Prefix.pch(pch全稱是「precompiled header」,也就是預編譯頭文件,調試
該文件裏存放的工程中一些不常被修改的代碼,好比經常使用的框架頭文件,code
這樣作的目的提升編譯器編譯速度。咱們知道當咱們修改一個工程中某個文件代碼時候,資源
編譯器並非從新編譯全部全部文件,而是編譯改動過文件的,假如pch中某個文件修改了,get
那麼pch整個文件裏包含的的其餘文件也會從新編譯一次,這樣就會消耗大量時間,編譯器
因此它裏面添加的文件最好是是不多變更或不變更的頭文件或者是預編譯的代碼片斷;)
文件中添加
#ifdef DEBUG #define NSLog(...) NSLog(__VA_ARGS__) #define debugMethod() NSLog(@"%s", __func__) #else #define NSLog(...) #define debugMethod() #endif
上段代碼的意思就是 用宏指令作一個判斷,若是DEBUG爲真,則編譯#ifdef到#endif宏定義,不然編譯器就不編譯;
在 「Target > Build Settings > Preprocessor Macros > Debug」 裏有一個」DEBUG=1」。
設置爲Debug模式下,Product→Scheme→SchemeEdit Scheme設置Build Configuration成Debug時,
就能夠打印nslog了。設置Release,發佈app版本的時候就不會打印了,提升了性能