NSLog打印信息的从新设置

摘要:
前提:在XCode中开发和调试时,通常需要打印一些调试信息进行调试。你知道,当有更多的地方可以打印信息时,在模拟器上运行可能不是问题,因为模拟器使用计算机硬件,但当应用程序在设备上运行时,这些输出语句将极大地影响应用程序的性能。为了解决这个问题,可以编写一些宏来控制这些调试信息的输出。在发布版本中,禁止输出NSLog内容,因为NSLog输出会消耗系统资源,并且输出数据还可能泄露应用程序的安全性
前提:在XCode做开发调试时往往需要打印一些调试信息做debug用,大家知道当打印信息的地方多了之后在模拟器上跑可能不会有什么问题,因为模拟器用的是电脑的硬件但是当应用跑在设备上时这些输出语句会在很大程度上影响应用的性能,针对这种问题可以写一些宏来控制这些调试信息的输出。 在release版本禁止输出NSLog内容

因为NSLog的输出还是比较消耗系统资源的,而且输出的数据也可能会暴露出App里的保密数据,所以发布正式版时需要把这些输出全部屏蔽掉。

我们可以在发布版本前先把所有NSLog语句注释掉,等以后要调试时,再取消这些注释,这实在是一件无趣而耗时的事!还好,还有更优雅的解决方法,就是在项目的prefix.pch文件里加入下面一段代码,加入后,NSLog就只在Debug下有输出,Release下不输出了。

如何实现:

在-Prefix.pch(pch全称是“precompiled header”,也就是预编译头文件,该文件里存放的工程中一些不常被修改的代码,比如常用的框架头文件,这样做的目的提高编译器编译速度。我们知道当我们修改一个工程中某个文件代码时候,编译器并不是重新编译所有所有文件,而是编译改动过文件的,假如pch中某个文件修改了,那么pch整个文件里包含的的其他文件也会重新编译一次,这样就会消耗大量时间,所以它里面添加的文件最好是是很少变动或不变动的头文件或者是预编译的代码片段;)文件中添加[plain] view plaincopy

    1. #ifdef DEBUG
    2. #define NSLog(...) NSLog(__VA_ARGS__)
    3. #define debugMethod() NSLog(@"%s", __func__)
    4. #else
    5. #define NSLog(...)
    6. #define debugMethod()
    7. #endif 

      上段代码的意思就是 用宏指令做一个判断,如果DEBUG为真,则编译#ifdef到#endif宏定义,否则编译器就不编译;

      这个DEBUG在哪设置呢,

      在 "Target > Build Settings > Preprocessor Macros > Debug" 里有一个"DEBUG=1"。

      设置为Debug模式下,Product-->Scheme-->SchemeEdit Scheme
      设置Build Configuration成Debug时,就可以打印nslog了。
      设置Release,发布app版本的时候就不会打印了,提高了性能
    8. 这中写法可以打印的时候可以不添加 @符合
    9. #ifdef DEBUG

       # define ZXLog(fmt, ...) NSLog((@"%s -%d " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

      //# define ZXLog(...) {}

      #else

      # define ZXLog(...) {}

      #endif

免责声明:文章转载自《NSLog打印信息的从新设置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MVC之ValidationAttributeEclipse 代码提示功能设置 (转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ObjectiveC中一种消息处理方法performSelector: withObject:

摘要: Objective-C中调用函数的方法是消息传递,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候传递人和消息。首先介绍两个方法。 Objective-C中调用函数的方法是“消息传递”,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消...

IOS ——OC—— NSDictionary的使用总结

键与值一一对应,键不能重复; 值可以重复; 1.NSDictionary的创建:(字典的内容是无序的,不能进行排序)  NSDictionary *dic = [NSDictionary dictionary];//创建一个空字典                 NSDictionary *dic1 = [NSDictionary dictionaryW...

ios基础之UITableViewCell的重用(带示例原创)

之前一个月刚刚系统的开始接触IOS开发,对UI控件大体了解了一遍,但是因为没有实际的参与项目,对细枝末节的还是不很清楚。 昨天突然想到:UITableViewCell的重用到底是怎么回事,上网查了许多资料后略有体会,但大都差不多,于是想自己实验一下。 便新建了个single view的工程,在storyboard上拖了个tableview,用最基础的方法绑...

iOS 图片本地存储、本地获取、本地删除

在iOS开发中、经常用到图片的本地化。iOS 图片本地存储、本地获取、本地删除,可以通过以下类方法实现。 //将图片保存到本地 + (void)SaveImageToLocal:(UIImage*)image Keys:(NSString*)key { //首先,需要获取沙盒路径 NSString*picPath=[NSStringstringWithF...

触摸

  UIView支持触摸事件  因为继承于UIResponder,而且支持多点触摸,使用时需要定义UIView子类,实现触摸相关的方法 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;点击开始时执行此方法(多么见名知意) - (void)touchesEnded:(NSSet...

iOS开发之Xcode常用调试技巧总结

转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题。平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼。Debug的技巧很多,比如最常见的方式是打个Log,在一些工程中处处可见NSLog。还有就是打断点的Debug方式等。诸如此类,下面就自己在开发过程中常用的Xcode调试技巧简单的做...