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修饰符