iOS 中 weak 的实现原理

作者: 牵线小丑 | 来源:发表于2017-03-29 20:37 被阅读3909次

开头

本文是看了 iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析) 一文后,为了加深自己的理解,从自己的角度来讲如何实现类似的功能。

实现 weak

weak 的作用

weak 关键字的作用弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为 nil

如何实现 weak
  1. 现在我们将 weak 的思路整理一下:

  2. 整个系统中存在很多个对象,这些对象都可能会被弱引用,那么我们需要一个容器来容纳这些被弱引用的对象,比如数组,在此将这个容器的数据结构标识为 objectContainerDataStructure

  3. 一个对象可能会被多次弱引用,当这个对象被销毁时,我们需要找到这个对象的所有弱引用,所以我们需要将这些弱引用的地址(即指针)放在一个容器里,比如数组,在此将这些弱引用的地址的数据结构标识为 pointerContainerDataStructure

  4. 当对象不再被强引用时需要销毁的时候,我们需要通过这个对象在 objectContainerDataStructure 找到其对应的 pointerContainerDataStructure,进而找到这个对象的所有弱引用,将其置为 nil

  5. 通过上面的步骤,我们大概可以得出这么一个数据结构:

  6. pointerContainerDataStructure 仅仅只是容纳一个对象的所有弱引用的地址,所以用数组即可;

  7. objectContainerDataStructure 是一个 key-value 数据结构,将对象作为 key,对象的内存地址是最好的选择;

  8. iOS 中常用的 key-value 数据结构就是字典 Dictionary ,在这里我们的 key 是一个数值对象,value 则是一个数值数组对象,可以用哈希表实现;

  9. 总结

为了实现 weak,我们需要这样的一张弱引用表:

  1. 表的数据结构是哈希表;

  2. 表的 key 是对象的内存地址;

  3. value 是指向该对象的所有弱引用的指针;

结尾

上面是如何自己实现 weak 的一个大概思路,Apple 的实现可以看 iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析) 一文。

相关文章

  • iOS底层原理:weak的实现原理

    iOS底层原理:weak的实现原理iOS底层原理:weak的实现原理

  • iOS weak 底层实现原理(二):objc-weak 函数列

    前言 为了全面透彻的分析 weak 的实现原理,前面 iOS weak 底层实现原理(一):SideTable|s...

  • iOS 中 weak 实现原理

    weak 的作用 weak 关键字的作用弱引用,所引用对象的计数器不会加一,并在引用对象被释放的时候自动被设置为 ...

  • iOS 中 weak 的实现原理

    开头 本文是看了 iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析) 一文后,为了加...

  • iOS中weak的实现原理

    1:weak的实现原理 answer one:通过weak_store将weak对象,以[key:value]的形...

  • iOS weak实现原理

    我们日常开发中经常是使用weak关键字来解决循环引用的问题,原因是被weak引用的对象它的引用计数不会增加,而且在...

  • iOS中Hash的应用分析

    一、下图只是列出了部分知识点(Hash在iOS中的应用分析整理) 1.1、关联对象的实现原理: 1.2、weak的...

  • iOS weak的实现原理

    1.weak简述 weak表其实是一个hash表,Key是所指对象的地址,Value是weak指针的地址数组,we...

  • iOS weak的实现原理

  • weak实现原理

    平时开发中我们经常会用到weak,但是它的实现原理也许不是很清楚,今天就从源码来探究一下(weak实现原理源码链接...

网友评论

  • 爱写措别字儿:面试预热!
  • 诸子百家谁的天下:就知道weak指针后面维持着一张哈希表,底层实现看不懂,,,:joy:
    MoussyL:同不懂 ,底层实现只能看懂一点,感觉c++ 东西太多了,而且超级灵活,一时半会补不完,不得不佩服苹果工程师 ~

本文标题:iOS 中 weak 的实现原理

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