美文网首页
iOS中弱引用管理相关问题

iOS中弱引用管理相关问题

作者: 没八阿哥的程序 | 来源:发表于2018-10-31 10:35 被阅读26次

    关于弱引用在工作和面试中都会经常遇到,那么这里我就两个问题说一下弱引用管理。

    weak变量是怎样添加到弱引用表中的?

    当使用如下代码

    id __weak obj1 = obj;
    

    经过编译之后会变成:

    id obj1;
    objc_initWeak(&obj1,obj);
    

    一个被声明为__weak的对象指针,经过编译器的编译之后,会调用objc_initWeak()方法,经过一系列的函数调用栈,最终会在weak_register_no_lock()函数中进行弱引用变量的添加,具体添加的位置是通过Hash算法来进行位置查找的,如果查找过程中已经有了当前对象对应的弱引用数组,就把这个新的弱引用变量添加到这个数组中,如果没有的话,就重新创建一个弱引用数组,把这个新的弱引用变量添加到第0个位置,后面的都置为nil。 其中具体的实现过程可以在苹果官网查看相应的源码实现。

    清除weak变量,同时设置置为nil

    当一个weak 对象被dealloc之后,dealloc内部会去调用弱引用清除的相关函数,然后调用weak_clear_no-lock()函数,根据当前指针查找弱引用表,找到当前对象相对应的弱引用数组,遍历这个数组的所有弱引用指针,分别置为nil.

    相关文章

      网友评论

          本文标题:iOS中弱引用管理相关问题

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