#if !defined(NS_BLOCK_ASSERTIONS)
//NSAssert定义
#if !defined(_NSAssertBody)
#define NSAssert(condition, desc, ...)
do {
__PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS
if (__builtin_expect(!(condition), 0)) {
NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__];
__assert_file__ = __assert_file__ ? __assert_file__ : @"<Unknown File>";
[[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd
object:self file:__assert_file__
lineNumber:__LINE__ description:(desc), ##__VA_ARGS__];
}
__PRAGMA_POP_NO_EXTRA_ARG_WARNINGS
} while(0)
#endif
//NSCAssert定义
#if !defined(_NSCAssertBody)
#define NSCAssert(condition, desc, ...)
do {
__PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS
if (__builtin_expect(!(condition), 0)) {
NSString *__assert_fn__ = [NSString stringWithUTF8String:__PRETTY_FUNCTION__];
__assert_fn__ = __assert_fn__ ? __assert_fn__ : @"<Unknown Function>";
NSString *__assert_file__ = [NSString stringWithUTF8String:__FILE__];
__assert_file__ = __assert_file__ ? __assert_file__ : @"<Unknown File>";
[[NSAssertionHandler currentHandler] handleFailureInFunction:__assert_fn__
file:__assert_file__
lineNumber:__LINE__ description:(desc), ##__VA_ARGS__];
}
__PRAGMA_POP_NO_EXTRA_ARG_WARNINGS
} while(0)
#endif
//NSParameterAssert定义
#define NSParameterAssert(condition) NSAssert((condition), @"Invalid parameter not satisfying: %@", @#condition)
//NACParameterAssert定义
#define NSCParameterAssert(condition) NSCAssert((condition), @"Invalid parameter not satisfying: %@", @#condition)
参看链接:https://www.jianshu.com/p/6e444981ab45