美文网首页
Block 相关知识

Block 相关知识

作者: River_YYH | 来源:发表于2021-02-04 17:01 被阅读0次
    image.png

    1、什么是block

    Block 是将函数及其执行上下文封装起来的对象
    

    2、block截获对象


    image.png
    a、对于基本数据类型的局部变量截获其值。
    b、对于对象类型的局部变量连同所有权修饰符一起截获。
    c、以指针形式截获局部静态变量。
    d、不截获全局变量、静态全局变量.
    

    3、在什么情况下需要使用__block修饰符?

    一般情况下,对被截获变量进行赋值操作需要使用__block
    
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

    4、为什么block会产生循环引用?
    a、当前block对当前对象的某一成员变量的进行截获,那么这个block对这个变量就有了一个强引用,当前block由于当前对象对其有一个强引用,就会产生一种自循环引用,我们可以将其变量声明为__weak来解决
    b、如果我们定义一个__block也是会产生循环引用但是需要区分场景:
    一种是ARC下可以产生但是MRC下不会,同时在ARC下我们通过段环方式来解决。但是有弊端若这个Block一直没有调用这个循环引用就一直存在。
    5、你都遇见过哪些循环引用?你又是怎样解决的?

    会遇见blcok引起循环引用:block捕获当前对象一个成员变量同时block也是其
    成员变量,通过__weak来避免;__block也会引起,通过断闭环来解决。
    

    相关文章

      网友评论

          本文标题:Block 相关知识

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