在运行应用时候,我们可能会加入一些打印信息来帮助我们跟踪应用的运行信息,代码如下
#ifdef DEBUG
#define NSLog(format, ...) do { \
fprintf(stderr, "<%s : %d> %s\n", \
[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], \
__LINE__, __func__); \
(NSLog)((format), ##__VA_ARGS__); \
fprintf(stderr, "-------\n"); \
} while (0)
#else
#define NSLog(...)
#endif
正常使用都正常,但是就是不能在.mm 文件里引用,不然nsobjcruntime.h就会报错,坑了我好久才找到问题所在,因为宏定义的NSLog名字和系统的一样,在.mm里引用的话,就会报错,同时会导致nsobjcruntime.h也报错。
具体原因不清楚,如果有知道原因的,麻烦指教一下。
****解决办法****
① 把宏定义里的NSLog改成其它名字就编译通过了。
② 不过刚刚发现了不用改名字的方法,------> 在宏定义里加入
#import <UIKit/UIKit.h> 或者 #import <Foundation/Foundation.h>
就可以编译通过!wtf!