- 标记方法为弃用
//系统定义的两个宏
#define DEPRECATED_ATTRIBUTE __attribute__((deprecated))
#define DEPRECATED_MSG_ATTRIBUTE(msg) __attribute((deprecated((msg))))
eg:
@interface MyClass : NSObject { ... }
-(void)foo:(id)x DEPRECATED_ATTRIBUTE ;
// If you want to specify deprecated message:
-(void)bar:(id)x DEPRECATED_MSG_ATTRIBUTE("Use baz: method instead.");
...
@end
- 判断当前设备是模拟器还是真机
#if TARGET_IPHONE_SIMULATOR
// 模拟器
#elif TARGET_OS_IPHONE
// 真机
#endif
- 判断当前设备系统
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
// 这里写设备系统大于8.0 以上的代码
#else
// 这里写设备系统小于8.0以上的代码
#endif
- 在发布模式下屏蔽输出函数
#ifdef DEBUG
#define NSLog(format, ...) NSLog(format, ##__VA_ARGS__)
#else
#define NSLog(format, ...)
VA_ARGS是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。