零碎知识

  1. 标记方法为弃用
//系统定义的两个宏
#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
  1. 判断当前设备是模拟器还是真机
#if TARGET_IPHONE_SIMULATOR  
    // 模拟器  
#elif TARGET_OS_IPHONE  
    // 真机  
#endif  
  1. 判断当前设备系统
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0  
    // 这里写设备系统大于8.0 以上的代码  
#else  
    // 这里写设备系统小于8.0以上的代码  
#endif  
  1. 在发布模式下屏蔽输出函数
#ifdef DEBUG
#define NSLog(format, ...) NSLog(format, ##__VA_ARGS__)
#else
#define NSLog(format, ...)

VA_ARGS是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。

你可能感兴趣的:(零碎知识)