I opened snippet of the NSAssert and found this:
do {                \
    __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \
    if (!(condition)) {     \
         [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \
         object:self file:[NSString stringWithUTF8String:__FILE__] \
         lineNumber:__LINE__ description:(desc), ##__VA_ARGS__]; \
      }             \
    __PRAGMA_POP_NO_EXTRA_ARG_WARNINGS \
} while(0)
Why do ... while(0) was used? It will be allways performed one time.
 
    