Xcode升级到8以后,大家基本都会发现一个问题,就是模拟器下打印的日志里面会有一些额外的无用信息,当然对于这个问题大家可有通过在下图的位置添加这个设置来解决额外信息打印的问题。
加上这个设置以后,模拟器确实没有了那些烦人的额外信息输出了,但是新问题出来了,这时候换成iOS10.0的真机测试,发现没有日志打印了。其实这个不能说是一个bug,应该是苹果的一个进步,因为我们知道,系统日志的打印对应app的性能是有一定影响的,平时我们为了让系统日志在release模式下不打印,都会在pch文件中通过以下定义来实现:
//清除release模式所有打印日志
#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#define debugMethod() NSLog(@"%s", __func__)
#else
#define NSLog(...)
#define debugMethod()
#endif
否则,线上的包也会产生很大打印日志,一定程度影响APP的性能。让真机能够正常打印日志的方法有两种,一个就是通过自定义日志输出,网上有很多,这里不做论述;第二种就是不借助任何第三方知识,只要把上图所设置的模式去掉即可,这时你会发现,在真机下其实是不会有额外烦人的打印日志的,只是在模拟器下会有。所以,对于一直用真机运行的朋友来说,根本不存在额外烦人日志的问题,对于喜欢用模拟器的朋友,如果不进行上图的设置,打印的开始会出现额外的日志信息,不过其实也没有多少,即使有也会很快被下面的有用日志所覆盖掉。为了在真机和你模拟器下都能正常打印系统日志,最好不要进行上图的设置,当然还是要在pch文件中进行release模式不打印日志的设置。当然如果你设置了上图的设置,模拟器下打印正常,真机不打印,正好可以不用进行额外的release模式设置了,哈哈,如果你不怎么用真机测试的话可以这么搞。
如果对于有强迫症的朋友来说,即想在模拟器下不打印额外烦人日志,又能在真机下打印日志,那就介绍一个简单的自定义日志打印方式。首先为了确保模拟器下打印正常,还是要进行上图的设置,其次,在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
这样在我们的项目中需要打印日志的地方,我们就可以通过TonyLog(...)来进行打印了,不用系统的NSLog()了,当然也不用额外再设置release模式下禁止打印了,因为上面已经设置过了,哈哈。