转的,在哪转的忘了,本身又作了一些整理。 xcode
咱们平时在开发应用的时候,常常会用到 NSLog 来调试咱们的程序,而随着项目愈来愈大,这些用于调试的日志输出就会变得很难管理。 发布正式版的时候必定要屏蔽掉全部后台输出,由于这些输出仍是比较消耗系统资源的。 每每到了这个时候,咱们不得不去一行一行的找到 NSLog 调用,而后注释掉。 这样作在项目小的时候还比较有效,但随着项目规模的增加,就会变得愈来愈难控制。 下面就给你们介绍一个简单的方法,让咱们在生成 Release 版本时不须要进行任何更改便可屏蔽全部的 Log 输出。 工具
首先咱们先要定义这样一段预处理命令,文件名随便起,例如 CLog.h 开发工具
#ifdef DEBUG
#define CLog(format, ...) NSLog(format, ## __VA_ARGS__)
#else
#define CLog(format, ...)
#endif spa
这里咱们判断 DEBUG 这个宏是否认义,若是有定义咱们就将这个 CLog 宏替换成 NSLog 调用,而若是没有定义过 DEBUG 标志咱们就直接跳过。这点应该不难理解。 debug
检查 DEBUG 标志是否正肯定义,Xcode 通常会在 debug 运行配置项里面已经定义号了DEBUG 标志,若是没定义咱们就本身写上,以个人 Xcode 4 为例,以下图: 调试
找到 PreProcessor Macros 这个属性,对于 Debug 配置咱们给他写上 DEBUG,而在 Release 配置中把它留空。 这样咱们刚才那段预处理命令就能够根据这个标志来判断咱们编译的时调试版本仍是发布版本,从而控制 NSLog 的输出。 (由于 Xcode 4 会把 debug/release 两个配置项同时对比展示出来,而 3.x 版本的只能分别设置,若是你用的时xcode 3.x 开发工具, 那么就分别对 Debug/Release 都检查一下)。 日志
到了这里咱们这个判断工做就都进行完了,不过这里还有一点比较麻烦,就是咱们若是想实用 CLog 宏,就必需要导入 CLog.h 这个头文件。 不过 Xcode 为咱们提供了一种很是巧妙的解决办法。 咱们本身看一下项目里的文件,是否是有一个叫作 xxx-prefix.pch 的文件,只要注意到 pch 这个扩展名就能够了。 这个文件是作什么用的呢? 下面是一个 pch 文件的样本: code
//
// Prefix header for all source files
//
#import <Availability.h>
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif orm
这里引入了一些头文件, 实际上是 Xcode 的一种预编译机制,咱们在编译一个项目的时候,会有不少经常使用的源文件,而且这些代码文件几乎不被修改,因此 Xcode 对这些文件只在早期进行一次编译,以便咱们之后的屡次构建过程当中反复实用。 例如这里的 UIKit 和 Foundation ,这样的机制能够加快咱们每次构建项目的速度。 固然这里咱们没必要太深究它,知道它的做用后,咱们就能够利用它来为咱们的开发提供便利。 咱们只须要将刚刚创建的 CLog.h 也在这里面引入一下,这样咱们项目中的全部文件就都可以访问到咱们刚刚定义的 CLog 宏了。 下面是完成后的 pch 文件: 资源
#import <Availability.h>
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "CLog.h"
#endif
这样,咱们的 CLog 就完成了,如今能够在任何一个源文件中实用 CLog 宏来输出日志,预处理命令会自动判断当前的编译配置,若是是 Debug,就会输出日志,反之则什么都不会输出。