// メッセージを続けて記述可能 // [SafeCast(NSMutableURLRequest, request) setTimeoutInterval:30]; #define SafeCast(type, var) \ ^type *(id obj, Class clazz) {\ if ([obj isKindOfClass:clazz]) {\ return obj;\ }\ return nil;\ } (var, [type class]) // 第一引数にブロック本体を、続けてブロックに渡す引数を記述 // SafeBlockHandler(completion, arg0, arg1); // == completion(arg0, arg1); #define SafeBlockHandler(block, ...) \ do {\ if (block) {\ blo