博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 中 weak 的实现原理
阅读量:6458 次
发布时间:2019-06-23

本文共 862 字,大约阅读时间需要 2 分钟。

开头

本文是看了 一文后,为了加深自己的理解,从自己的角度来讲如何实现类似的功能。

实现 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 的实现可以看 一文。

转载地址:http://cnizo.baihongyu.com/

你可能感兴趣的文章
ExtJs之组件(window)
查看>>
SoapUI中如何传递cookie
查看>>
shell中的一些技巧和知识
查看>>
eclipse 导出Runnable JAR file ,双击无法执行原因与解决 双击后闪退的原因 批处理java打包文件 @echo off start javaw -jar *.jar...
查看>>
静态成员变量的初始化
查看>>
POJ 1269 Intersecting Lines(判断两直线位置关系)
查看>>
MSSQL数据库跨表和跨数据库查询方法简(转)
查看>>
spring3.0.7中各个jar包的作用总结
查看>>
Windows 10 /win10 上使用GIT慢的问题,或者命令行反应慢的问题
查看>>
SSM——查询_分页
查看>>
梯度下降(Gradient descent)
查看>>
Windows平台分布式架构实践 - 负载均衡
查看>>
如何让LinearLayout也有类似Button的点击效果?
查看>>
JAVA读取文件方法大全
查看>>
寻找最小的k个数
查看>>
CSS3中的动画效果记录
查看>>
CI框架整合微信公共平台接口
查看>>
XCode快捷键
查看>>
request.getScheme()的使用方法
查看>>
Kaldi单音素模型 训练部分
查看>>