美文网首页在iOS开发的道路上越走越远
再论block,以及weak和block关键字

再论block,以及weak和block关键字

作者: ianCure | 来源:发表于2015-03-12 10:40 被阅读2568次

    前几天去阿里面试,谈到block,我说加上__block关键字可以满足block内修改block外变量的需求,加上__weak可以解决循环引用的问题

    但是面试官跟我说,__block也可以解决循环引用的问题,于是我陷入了迷茫,没听过这个啊,现在我们就来分析一下,看看他说的是不是对的。

    在block的底层实现结构中,我们解释了如何在block中修改外部变量,但是,当时解释的只不过是基本数据类型。

    那么,对于NSObject会怎么样呢?

    对于NSObject,如果我们想在NSObject中修改,那么也必须加上__block关键字,要不然就是全局变量或者static

    倘若我们并不想修改呢?,只是想访问,那么你可以不加任何修饰符,直接引用。

    但是这样可能会有一个循环引用的问题,为了解决这个问题,可以用weak关键字。

    也可以使用__block关键字,然后再block快结束的时候,把__block引用的变量设置为nil。

    只有在使用local变量时,block会复制对象,且强引用指针指向的对象一次。其它如全局变量、static变量、block变量等,block不会拷贝指针,只会强引用指针指向的对象一次。

    那么面试官为什么会说block也可以起到和weak一样的作用呢?以前在非arc环境中,__block修饰的变量在Block copy时是不会retain的,所以,也可以做到破解循环引用。我估计面试官是说的以前非ARC

    相关文章

      网友评论

        本文标题:再论block,以及weak和block关键字

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