block的原理是怎样的,本质是什么?
block本质也是个OC对象,它内部也有个ISA指针
block是封装了函数调用及函数调用环境的OC对象
block的底层结构如下图所示:

block的底层结构
block变量捕获

block变量捕获.png
block的类型

block类型.png
__block的作用,有什么使用注意点?

__block.png

截屏2022-04-10 下午12.09.43.png
block属性修饰词为什么是copy,使用block要注意哪些?
block如果不进行copy操作,就不会在堆上。我们没法控制他的生命周期。
使用注意循环引用问题。 解决循环引用可以用 __weak 或者 __unsafe_unretained 或者__block。
使用__block 要注意一定要调用block,并且在block内部将对象置为nil。
block修饰NSMutableArray时,需不需要添加__block?
不需要,因为只是对数组内容进行操作,并不是修改他的内存地址。