? 前提:在XCode做開(kāi)發(fā)調(diào)試時(shí)往往需要打印一些調(diào)試信息做debug用,大家知道當(dāng)打印信息的地方多了之后在模擬器上跑可能不會(huì)有什么問(wèn)題少梁,因?yàn)槟M器用的是電腦的硬件但是當(dāng)應(yīng)用跑在設(shè)備上時(shí)這些輸出語(yǔ)句會(huì)在很大程度上影響應(yīng)用的性能洛口,針對(duì)這種問(wèn)題可以寫(xiě)一些宏來(lái)控制這些調(diào)試信息的輸出。
在release版本禁止輸出NSLog內(nèi)容
因?yàn)镹SLog的輸出還是比較消耗系統(tǒng)資源的凯沪,而且輸出的數(shù)據(jù)也可能會(huì)暴露出App里的保密數(shù)據(jù)第焰,所以發(fā)布正式版時(shí)需要把這些輸出全部屏蔽掉。
我們可以在發(fā)布版本前先把所有NSLog語(yǔ)句注釋掉妨马,等以后要調(diào)試時(shí)挺举,再取消這些注釋,這實(shí)在是一件無(wú)趣而耗時(shí)的事烘跺!還好湘纵,還有更優(yōu)雅的解決方法,就是在項(xiàng)目的prefix.pch文件里加入下面一段代碼滤淳,加入后梧喷,NSLog就只在Debug下有輸出,Release下不輸出了脖咐。
如何實(shí)現(xiàn):
在-Prefix.pch(pch全稱是“precompiled header”伤柄,也就是預(yù)編譯頭文件,該文件里存放的工程中一些不常被修改的代碼文搂,比如常用的框架頭文件适刀,這樣做的目的提高編譯器編譯速度。我們知道當(dāng)我們修改一個(gè)工程中某個(gè)文件代碼時(shí)候煤蹭,編譯器并不是重新編譯所有所有文件笔喉,而是編譯改動(dòng)過(guò)文件的取视,假如pch中某個(gè)文件修改了,那么pch整個(gè)文件里包含的的其他文件也會(huì)重新編譯一次常挚,這樣就會(huì)消耗大量時(shí)間作谭,所以它里面添加的文件最好是是很少變動(dòng)或不變動(dòng)的頭文件或者是預(yù)編譯的代碼片段;)文件中添加 [plain] view plaincopy
#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#define debugMethod() NSLog(@"%s", __func__)
#else
#define NSLog(...)
#define debugMethod()
#endif
上段代碼的意思就是 用宏指令做一個(gè)判斷奄毡,如果DEBUG為真折欠,則編譯#ifdef到#endif宏定義,否則編譯器就不編譯吼过;
這個(gè)DEBUG在哪設(shè)置呢锐秦,
在 "Target > Build Settings > Preprocessor Macros > Debug" 里有一個(gè)"DEBUG=1"。
設(shè)置為Debug模式下盗忱,Product-->Scheme-->SchemeEdit Scheme
設(shè)置Build Configuration成Debug時(shí)酱床,就可以打印nslog了。
設(shè)置Release趟佃,發(fā)布app版本的時(shí)候就不會(huì)打印了扇谣,提高了性能