原文:http://www.cnblogs.com/LQCQ-Silent/p/6053664.html
我們先來(lái)回顧一下Xcode8發(fā)布以來(lái),我們遇到的一些關(guān)于打印的問(wèn)題,當(dāng)然也有解決方法:
1螺垢、Xcode8打印問(wèn)題
先看下面這個(gè)圖片,相信使用Xcode升級(jí)到Xcode8的都不陌生吧肄鸽。
當(dāng)時(shí)的感覺(jué)就是莫名其妙钓简,這里打印出來(lái)的一大堆日志,然而對(duì)于我們開(kāi)發(fā)并沒(méi)有多大用處评凝,個(gè)人感覺(jué)是apple測(cè)試Xcode時(shí)查看的打印信息追葡,發(fā)布時(shí)忘記刪掉的原因(謹(jǐn)代表個(gè)人想法,若有錯(cuò)誤,望指出)宜肉。當(dāng)然匀钧,網(wǎng)上也給出了解決方法:
很簡(jiǎn)單,在EditScheme -> Run -> Arguments在Environment Variables一欄中添加OS_ACTIVITY_MODE并設(shè)值為Disable,注意打勾谬返。然后clean一下之斯。運(yùn)行項(xiàng)目即可解決。
2遣铝、Xcode8+iOS10 真機(jī)測(cè)試佑刷。
上面說(shuō)了,我們?yōu)榱似帘蔚裟嵌褯](méi)多大用處的log酿炸。添加了OS_ACTIVITY_MODE
并設(shè)值為Disable瘫絮。這也是前提,現(xiàn)在問(wèn)題出現(xiàn)了:我使用iOS10真機(jī)測(cè)試時(shí)發(fā)現(xiàn)宏定義的NSLog打印在控制臺(tái)不顯示現(xiàn)象填硕。
當(dāng)時(shí)首先想到的也是:添加了OS_ACTIVITY_MODE并設(shè)值為Disable的問(wèn)題麦萤。如果不想看到那堆沒(méi)多大用處的log,又想顯示打印信息扁眯,怎么辦壮莹?網(wǎng)上有一些給出的方法,也能很好的解決問(wèn)題姻檀,但前提是你使用的宏定義大體是這樣的:
<pre><code>
ifdef DEBUG
define NSLog(...) NSLog(@"\n%s方法命满,\n第%d行,打印內(nèi)容:\n%@\n打印結(jié)束\n", PRETTY_FUNCTION, LINE, [NSString stringWithFormat:VA_ARGS])
else
define NSLog(...)
endif</pre></code>
那么你可以這樣解決問(wèn)題,方法如下:
<pre><code>
ifdef DEBUG
define NSLog(format, ...) printf("[%s] %s [第%d行] %s\n", TIME, FUNCTION, LINE, [[NSString stringWithFormat:format, ## VA_ARGS] UTF8String]);
else
define NSLog(format, ...)
endif</pre></code>
解釋:這是因?yàn)樵谕瓿?strong>OS_ACTIVITY_MODE設(shè)置后會(huì)發(fā)現(xiàn)真機(jī)調(diào)試時(shí)NSLog不輸出了施敢。所以需要定義成另一個(gè)函數(shù)來(lái)輸出周荐,例如printf()狭莱。
可以看下這篇文章:Xcode8模擬器警告與iOS10真機(jī)調(diào)試NSLog無(wú)效
3僵娃、Xcode8.1 +iOS10以上系統(tǒng),真機(jī)測(cè)試和模擬器測(cè)試腋妙,打印均不顯示問(wèn)題
<1>真機(jī)測(cè)試
如果只是真機(jī)測(cè)試打印顯示無(wú)效的話默怨,可以直接按照上面第二個(gè)方法去解決,也是能解決問(wèn)題的骤素,究其原因:還是添加了OS_ACTIVITY_MODE并設(shè)值為Disable的問(wèn)題匙睹。
<2>模擬器測(cè)試
如果在改過(guò)真機(jī)測(cè)試打印顯示無(wú)效的問(wèn)題后,模擬器測(cè)試打印還是無(wú)效的話济竹,現(xiàn)在的解決方法就直接了:刪除OS_ACTIVITY_MODE
并設(shè)值為Disable這個(gè)設(shè)置痕檬。
為此也做過(guò)很多嘗試,感覺(jué)最直接的方法還是直接去掉OS_ACTIVITY_MODE并設(shè)值為Disable這個(gè)設(shè)置是最好的解決方法送浊。
Xcode8.1本身也解決了“打印一堆沒(méi)多大用處的log”的問(wèn)題梦谜,所以去掉一開(kāi)始添加OS_ACTIVITY_MODE并設(shè)值為Disable 的想法吧。不過(guò)這還是只針對(duì)Xcode8以上(當(dāng)然不包括Xcode8)。
這篇文章也很不錯(cuò):iOS開(kāi)發(fā)-NSLog不打印設(shè)置