NS_BLOCK_ASSERTIONSが有効のとき可変長引数のNSAssertが未定義になる
NSCAssertも同様。これは一体どういう意図があるんだろう。それとも単なるバグなのか。
NSBLOCKASSERTIONSが無効のとき
#if !defined(NS_BLOCK_ASSERTIONS) && defined(__STDC_VERSION__) && (199901L <= __STDC_VERSION__) && (defined(__GNUC__) || 0)
#if !defined(_NSAssertBody)
#define NSAssert(condition, desc, ...) \
do { \
if (!(condition)) { \
[[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \
object:self file:[NSString stringWithUTF8String:__FILE__] \
lineNumber:__LINE__ description:(desc), ##__VA_ARGS__]; \
} \
} while(0)
#define NSAssert1(condition, desc, arg1) NSAssert((condition), (desc), (arg1))
#define NSAssert2(condition, desc, arg1, arg2) NSAssert((condition), (desc), (arg1), (arg2))
#define NSAssert3(condition, desc, arg1, arg2, arg3) NSAssert((condition), (desc), (arg1), (arg2), (arg3))
#define NSAssert4(condition, desc, arg1, arg2, arg3, arg4) NSAssert((condition), (desc), (arg1), (arg2), (arg3), (arg4))
#define NSAssert5(condition, desc, arg1, arg2, arg3, arg4, arg5) NSAssert((condition), (desc), (arg1), (arg2), (arg3), (arg4), (arg5))
#define NSParameterAssert(condition) NSAssert((condition), @"Invalid parameter not satisfying: %s", #condition)
#endif
NSBLOCKASSERTIONSが有効のとき
#if !defined(NSAssert)
#define NSAssert5(condition, desc, arg1, arg2, arg3, arg4, arg5) \
_NSAssertBody((condition), (desc), (arg1), (arg2), (arg3), (arg4), (arg5))
#define NSAssert4(condition, desc, arg1, arg2, arg3, arg4) \
_NSAssertBody((condition), (desc), (arg1), (arg2), (arg3), (arg4), 0)
#define NSAssert3(condition, desc, arg1, arg2, arg3) \
_NSAssertBody((condition), (desc), (arg1), (arg2), (arg3), 0, 0)
#define NSAssert2(condition, desc, arg1, arg2) \
_NSAssertBody((condition), (desc), (arg1), (arg2), 0, 0, 0)
#define NSAssert1(condition, desc, arg1) \
_NSAssertBody((condition), (desc), (arg1), 0, 0, 0, 0)
#define NSAssert(condition, desc) \
_NSAssertBody((condition), (desc), 0, 0, 0, 0, 0)
#endif
意図的にやってるとしてもメリットが分からない。油断してNSAssert(condition, desc, ...)を開発時に使いまくって、いざNSBLOCKASSERTIONS付きでreleaseビルドすると悲惨なことになる。
Written on July 26, 2011