美文网首页
Block的原理

Block的原理

作者: 39Coding | 来源:发表于2020-06-30 13:32 被阅读0次

block的原理是怎样的?本质是什么?

  • 本质就是一个封装了函数调用impl.FuncPtr以及函数调用环境函数需要的参数的OC对象impl.isa
Block的本质.jpg Block的结构.jpg Block的循环引用.jpg __block的__forwarding指针.jpg

__block的作用是什么?有什么使用注意点?

  • __block修饰的变量会被包装成另一种对象,可以用于解决block内部无法修改auto变量值的问题,先通过这个对象再通过__forwarding指针就可以访问到那个变量进行修改

  • 注意内存管理的问题,如果修饰的是对象,block拷贝到堆上时,在ARC环境下会对对象做retain操作,而MRC环境下则不会。

__block的内存管理(释放).jpg __block的内存管理(引用).jpg Block捕获的对象类型的auto变量.jpg MRC解决循环引用问题.jpg Block的变量捕获.jpg

block的属性修饰词为什么是copy?使用block有哪些使用注意?

  • block一旦没有进行copy操作就不会在堆上,拷贝在堆上是为了控制block的生命周期,进行内存管理
  • 使用注意:循环引用
ARC解决循环引用问题.jpg

block在修改NSMutableArray,需不需要添加__block?

  • 不需要,NSMutableArray有相应的api来修改数组内容,这是直接使用这个变量,而不是修改这个变量,所以不需要__block修饰,
  • __block能不加就尽量不加,加了数据结构就变得复杂,会生成一个额外的结构体
Block和__block的内存管理.jpg __block修饰符.jpg 对象类型的__blcok变量的内存管理.jpg 对象类型的__blcok变量和auto变量.jpg

相关文章

网友评论

      本文标题:Block的原理

      本文链接:https://www.haomeiwen.com/subject/pvfxqktx.html