Block的原理
2020-06-30 本文已影响0人
39Coding
block的原理是怎样的?本质是什么?
- 本质就是一个封装了函数调用
impl.FuncPtr
以及函数调用环境函数需要的参数
的OC对象impl.isa
__block
的作用是什么?有什么使用注意点?
-
被
__block
修饰的变量会被包装成另一种对象,可以用于解决block
内部无法修改auto
变量值的问题,先通过这个对象再通过__forwarding
指针就可以访问到那个变量进行修改 -
注意内存管理的问题,如果修饰的是对象,
block
拷贝到堆上时,在ARC环境下会对对象做retain
操作,而MRC
环境下则不会。
block的属性修饰词为什么是copy?使用block有哪些使用注意?
- block一旦没有进行copy操作就不会在堆上,拷贝在堆上是为了控制block的生命周期,进行内存管理
- 使用注意:循环引用
block在修改NSMutableArray,需不需要添加__block?
- 不需要,
NSMutableArray
有相应的api
来修改数组内容,这是直接使用这个变量,而不是修改这个变量,所以不需要__block
修饰, -
__block
能不加就尽量不加,加了数据结构就变得复杂,会生成一个额外的结构体