美文网首页
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