Block一个带有自动变量的匿名函数。
匿名函数是因为Block没有函数名称,由^返回值类型,入参类型,表达式组成。但可以赋值给Block类型变量。
自动变量在Block中表现为截获自动变量值,指Block内部调用外部变量时会捕获该变量在此瞬间的值。
1.block本质就是一个oc对象
2.block存储位置,可能分为3个地方:代码区,堆区,栈区(ARC情况下会自动拷贝到堆区,因此ARC下只能有两个地方:代码区,堆区)
3.代码区:不访问栈区的变量(如局部变量),且不访问堆区的变量(alloc创建的对象),此时block存放在代码区。
4.堆区:访问了处于栈区的 变量,或者堆区的变量,此时block存放在堆区。需要注意实际是放在栈区,在ARC情况下会自动拷贝到堆区,如果不是ARC则存放在栈区,所在函数执行完毕就会释放,想在外面调用需要copy指向它,这样就拷贝到了堆区,strong属性不会拷贝,会造成野指针错区。
Block可以作为变量,返回值,参数
END.