在c语言中,有三种类型的变量可在block内进行读写操作。 知识点1:
- 全局变量
- 全局静态变量
- 静态变量 //通过指针传递
知识点2:
- 当block字面量写在全局作用域时,即为 global block
- 当block字面量不获取任何外部变量时,即为global block
知识点3: 在开启ARC时,大部分情况下编译器通常会将创建在栈上的block自动拷贝到堆上,只有当block作为方法或函数的参数传递时,编译器不会自动调用copy
但方法/函数内部已经实现了一份拷贝了block参数的代码,或者如果编译器自动拷贝,那么调用者就不需要再手动拷贝,比如:
- 当block作为函数返回值时,编译器自动将block作为_Block_copy函数,效果等同于直接调用copy方法; *当block被赋值给__strong id类型的对象或block的成员变量时,编译器自动将block作为_Block_copy函数,效果等同于直接调用copy方法; *当block作为参数被传入方法名带有usingBlock的Cocoa Framework方法或GCD的API时,这些方法会在内部对传递进来的block调用copy或_Block_copy 进行拷贝。