美文网首页
weak到底有什么用

weak到底有什么用

作者: y2015 | 来源:发表于2018-01-22 10:09 被阅读8次

链接

weak是弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为nil。通常用于解决循环引用问题。

Runtime维护了一个weak表(哈希表),用于存储指向某个对象的所有weak指针。weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址(这个地址的值是所指对象的地址)数组。

weak 的实现原理可以概括一下三步:
1、初始化时:runtime会调用objc_initWeak函数,初始化一个新的weak指针指向对象的地址。
2、添加引用时:objc_initWeak函数会调用 objc_storeWeak() 函数, objc_storeWeak() 的作用是更新指针指向,创建对应的弱引用表。
3、释放时,调用clearDeallocating函数。clearDeallocating函数首先根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。

weak因为需要维护一份hash表,在初始化和释放时需要更多操作,因此耗费更多资源,只在必要时用weak。

相关文章

  • weak到底有什么用

    链接 weak是弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为nil。通常用于解决循环引...

  • OC--看objc源码认识weak

    weak修饰有什么用? 声明为weak的指针,weak指针指向的对象一旦被释放,weak的指针都将被赋值为nil ...

  • 知识点

    UIButton 父类是谁?UIControl assign weak 修饰的区别?为什么用weak修饰对象,而不...

  • weak 、 strong、delegate为什么用weak、

    https://www.jianshu.com/p/0e0ddeeade2c

  • weak 、 strong、delegate为什么用weak、

    同志们根据题目这些就是我平时 不太清楚的 我相信很多人也是不清楚的 所以我打算把他们弄明白了 为了给大家分享一下 ...

  • 读书何用?

    问:读书到底有什么用?每天坚持看书,有快乐,却是看不到直接的结果,觉得好累想放弃了怎么办? 答:读书到底有什么用?...

  • 文化~到底有什么用?

    文化~到底有什么用? 经常听到有人说,读了那么多书,到底有什么用,最终也没有记住多少,还是都还回去了嘛。 确实是这...

  • 走近Github Education Pack

    什么是Github Education Pack? Github Education Pack到底有什么用? 带着...

  • iOS block 简单循环引用,大环引用(为什么用 __wea

    ios block 简单循环引用,大环引用(为什么用 __weak 修饰可以打破循环引用,怎样做断环操作) 分析下...

  • 伪元素 伪类

    伪元素是什么呢 伪元素到底有什么用呢 伪类呢

网友评论

      本文标题:weak到底有什么用

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