Xcode升級(jí)到8以后帐萎,大家基本都會(huì)發(fā)現(xiàn)一個(gè)問題撩独,就是模擬器下打印的日志里面會(huì)有一些額外的無用信息敞曹,當(dāng)然對(duì)于這個(gè)問題大家可有通過在下圖的位置添加這個(gè)設(shè)置來解決額外信息打印的問題。
加上這個(gè)設(shè)置以后综膀,模擬器確實(shí)沒有了那些煩人的額外信息輸出了澳迫,但是新問題出來了,這時(shí)候換成iOS10.0的真機(jī)測(cè)試剧劝,發(fā)現(xiàn)沒有日志打印了橄登。其實(shí)這個(gè)不能說是一個(gè)bug,應(yīng)該是蘋果的一個(gè)進(jìn)步讥此,因?yàn)槲覀冎缆G拢到y(tǒng)日志的打印對(duì)應(yīng)app的性能是有一定影響的,平時(shí)我們?yōu)榱俗屜到y(tǒng)日志在release模式下不打印萄喳,都會(huì)在pch文件中通過以下定義來實(shí)現(xiàn):
//清除release模式所有打印日志
#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#define debugMethod() NSLog(@"%s", __func__)
#else
#define NSLog(...)
#define debugMethod()
#endif
否則卒稳,線上的包也會(huì)產(chǎn)生很大打印日志,一定程度影響APP的性能他巨。讓真機(jī)能夠正常打印日志的方法有兩種充坑,一個(gè)就是通過自定義日志輸出,網(wǎng)上有很多染突,這里不做論述捻爷;第二種就是不借助任何第三方知識(shí),只要把上圖所設(shè)置的模式去掉即可份企,這時(shí)你會(huì)發(fā)現(xiàn)也榄,在真機(jī)下其實(shí)是不會(huì)有額外煩人的打印日志的,只是在模擬器下會(huì)有司志。所以甜紫,對(duì)于一直用真機(jī)運(yùn)行的朋友來說,根本不存在額外煩人日志的問題骂远,對(duì)于喜歡用模擬器的朋友棵介,如果不進(jìn)行上圖的設(shè)置,打印的開始會(huì)出現(xiàn)額外的日志信息吧史,不過其實(shí)也沒有多少邮辽,即使有也會(huì)很快被下面的有用日志所覆蓋掉唠雕。為了在真機(jī)和你模擬器下都能正常打印系統(tǒng)日志,最好不要進(jìn)行上圖的設(shè)置吨述,當(dāng)然還是要在pch文件中進(jìn)行release模式不打印日志的設(shè)置岩睁。當(dāng)然如果你設(shè)置了上圖的設(shè)置,模擬器下打印正常揣云,真機(jī)不打印捕儒,正好可以不用進(jìn)行額外的release模式設(shè)置了,哈哈邓夕,如果你不怎么用真機(jī)測(cè)試的話可以這么搞刘莹。
如果對(duì)于有強(qiáng)迫癥的朋友來說,即想在模擬器下不打印額外煩人日志焚刚,又能在真機(jī)下打印日志点弯,那就介紹一個(gè)簡(jiǎn)單的自定義日志打印方式。首先為了確保模擬器下打印正常矿咕,還是要進(jìn)行上圖的設(shè)置抢肛,其次,在pch文件中添加如下代碼:
#ifdef DEBUG
#define TonyString [NSString stringWithFormat:@"%s", __FILE__].lastPathComponent
#define TonyLog(...) printf("%s: 第%d行: %s\n\n", [TonyString UTF8String] ,__LINE__, [[NSString stringWithFormat:__VA_ARGS__] UTF8String]);
#else
#define TonyLog(...)
#endif
這樣在我們的項(xiàng)目中需要打印日志的地方碳柱,我們就可以通過TonyLog(...)來進(jìn)行打印了捡絮,不用系統(tǒng)的NSLog()了,當(dāng)然也不用額外再設(shè)置release模式下禁止打印了莲镣,因?yàn)樯厦嬉呀?jīng)設(shè)置過了福稳,哈哈。