牛骨文教育服务平台(让学习变的简单)

添加PCH文件

现在Xcode6、7创建一个新的工程时将默认不会再带有PCH文件,需要手动添加PCH文件。

  1. 在Supporting Files目录下,选择 File > New > File > iOS > Other > PCH File 然后点击下一步进行命名,建议命名格式为项目名称-Prefix,如图Demo 
  2. 创建的PCH文件与编译器Xcode进行连接:找到 Project > Build Settings > 搜索 “Prefix Header“;
  3. 在Apple LLVM X.0 -Language栏目中能够找到Prefix Header,双击之后添加该PCH文件地址,如图所示: 
     
    这样Xcode6、7的PCH文件就能够顺利加到工程中去了。

NSLog函数真机不打印

在实际项目中NSLog函数打印信息是必不可少的事情,可以友好的帮助我们调试程序,然而在模拟器上占用的是电脑的内存,但在真机上线时如果不把NSLog函数屏蔽掉,势必会造成内存的占用,性能的减弱,这对做一款优秀的App的出发点是十分违背的,所以在真机中借助PCH设置全局变量不打印NSLog函数是实战项目中必不可少的要求。

在刚才建立的PCH中对NSLog进行改造:

  #ifdef DEBUG

  #define DLog(fmt, ...) NSLog((@"[文件名:%s]
" "[函数名:%s]
" "[行号:%d] 
" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);

  #define DeBugLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

 #define NSLog(...) NSLog(__VA_ARGS__);
 #define MyNSLog(FORMAT, ...) fprintf(stderr,"[%s]:[line %d行] %s
",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
  #else
  #define DLog(...)
  #define DeBugLog(...)
  #define NSLog(...)
  #define MyNSLog(FORMAT, ...) nil
  #endif
  • 1) VA_ARGS 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的”,”去掉的作用,否则会编译出错, 你可以试试。

  • 2) FILE 宏在预编译时会替换成当前的源文件名

  • 3) LINE宏在预编译时会替换成当前的行号

  • 4) FUNCTION宏在预编译时会替换成当前的函数名称

OK了,测试一下吧!真机与模拟的互相切换