附上原文链接,http://fuckingblocksyntax.com
1、block作为本地变量
returnType(^blockName)(parameterTypes) = ^returnType(parameters){... ...};
2、block作为属性
@property(nonatomic,copy)returnType(^blockName)(parameterTypes);
3、block作为函数参数
- (void)someMethodThatTakesABlock:(returnType(^)(parameterTypes))blockName
4、作为方法参数的时候被调用
[someObject someMethodThatTakesABlock:^returnType(parameters){... ...}];
5、typedef定义block
typedef returnType(^typeName)(parameterTypes);
typeName blockName = ^returnType(parameters){... ...};