简介
Block 是C语言级的语法也是一个运行时特性。它和C语言的标准函数很相似,但是在有可执行的代码块的基础上它还有将变量保存到栈或者堆上的能力。因此Block持有了一组“状态值”(即前面说的变量)来确保执行的结果。
语法
block的用法比较多样,下面根据具体的用法都来看一下怎么样声明
As a local variable:
returnType(^blockName)(parameterTypes) = ^returnType(parameters) {...};
As a property:
@property (nonatomic, copy)returnType(^blockName)(parameterTypes);
As a method parameter:
-(void)someMethodThatTakesABlock:(returnType(^)(parameterTypes))blockName;
As an argument to a method call:
[someObject someMethodThatTakesABlock:^returnType(parameters) {...}];
As a typedef:
typedefreturnType(^TypeName)(parameterTypes);
TypeNameblockName = ^returnType(parameters) {...};
上面给出了Block不同身份时的不同声明方式,当然这是返回值和参数都有的情况,如果没有的话还可以简写。
特点和用途
block由于下面两个特点很适合作为回调
1.调用函数时就可以书写函数执行完之后要执行的代码
2.能访问本地变量(这点非常值得注意)