Blocks
Block语法
block表达式
^ 返回值类型 参数列表 表达式
^void(void){
printf("Blocks\n")
}
其中返回值类型和参数列表均可省略
block类型
返回值类型(^变量名)参数列表
//例如
int(^blk)(int) = ^(int count){return count+1}
//赋值
int(^blk1)(int) = blk
使用typedef声明block类型变量
typedef int (^blk_t)(int)
截获自动变量值
在Blocks中,block表达式回拨或所使用的自动变量的值,即保存了该自动变量的瞬间值。
__block说明符
自动变量值捕获只能保存其瞬间值,但是保存后并不能改写该值了。
如果想在block语法的表达式中将值赋给在Block语法外声明的自动变量,需要在该自动变量前添加__block
修饰符
截获对象
当截获的为OC
的对象时,其实是截获的为对象的指针,因此我们可以在不修改指针的情况下修改该对象内容,而不需要添加__block
修饰符