block 的几种写法:
As a local variable:本地参数
(Demo1) blockType blockName = blockExpression
returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};
As a property: 类属性
(Demo2) blockType blockName
@property (nonatomic, copy, nullability) returnType (^blockName)(parameterTypes);
As a method parameter: 函数参数定义
(Demo3) blockType blockName
- (void)someMethodThatTakesABlock:(returnType (^nullability)(parameterTypes))blockName;
As an argument to a method call:函数传入参数
(Demo4) blockExpression
[someObject someMethodThatTakesABlock:^returnType (parameters) {...}];
As a typedef:做一个别名时
(Demo5) blockType blockName(TypeName)
typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};
As a Type: 作为一个类型
(Demo6) blockType blockName = (blockType)blockName
returnType(^blockName)(parameterTypes) = (returnType(^)(parameterTypes))variable;