我们都知道,宏定义是编译期常量。而OC是一种动态语言。
1.iOS系统版本判断的两个宏定义
1 __IPHONE_OS_VERSION_MAX_ALLOWED // iOS系统版本最大允许 2 __IPHONE_OS_VERSION_MIN_REQUIRED // iOS系统版本最小需要
使用这俩宏,仅仅能消除编译器的警告而已。因为OC是动态语言,所以系统版本还需要判断。例如:
2.断言
/** @brief 适用:Objective-C的方法 @param condition 条件. @param desc 描述. @return 若条件为NO,则工程崩溃且打印 desc. */ NSAssert(<#condition#>, <#desc, ...#>) /** 适用:C的函数 */ NSCAssert(<#condition#>, <#desc, ...#>) /** @brief 适用:Objective-C @param condition 条件. @return 若条件为NO,则工程崩溃. */ NSParameterAssert(<#condition#>) /** 适用:C */ NSCParameterAssert(<#condition#>)
NSAssert 用法:
1 Man *man = nil; 2 NSAssert(man, @"man Can't be empty.");
崩溃日志:
1 2016-04-02 18:34:49.505 OC测试[22300:1679317] *** Assertion failure in -[ViewController viewDidLoad], /Users/liuxianzhi/Desktop/OC测试/OC测试/ViewController.m:31 2 2016-04-02 18:34:49.515 OC测试[22300:1679317] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'man Can't be empty.'
NSParameterAssert用法:
#pragma mark - View lifeCycle - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor orangeColor]; [self executeWithParam:nil]; } - (void)executeWithParam:(NSString *)param { // param存在,程序继续;反之崩溃! NSParameterAssert(param); }
崩溃日志:
1 2016-04-02 18:51:10.155 OC测试[22326:1713380] *** Assertion failure in -[ViewController executeWithParam:], /Users/liuxianzhi/Desktop/OC测试/OC测试/ViewController.m:34 2 2016-04-02 18:51:10.164 OC测试[22326:1713380] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: param'
尊重作者劳动成果,转载请注明: 【kingdev】