2019-02-13
2019-02-13 本文已影响0人
高思阳
![](https://img.haomeiwen.com/i2537311/4de838df9678fe18.jpg)
![](https://img.haomeiwen.com/i2537311/2490c1d3fd5ab5e5.jpg)
![](https://img.haomeiwen.com/i2537311/ee324ce8f721e7c0.jpg)
![](https://img.haomeiwen.com/i2537311/c00833152c72e418.jpg)
![](https://img.haomeiwen.com/i2537311/4dd88fca789af92e.jpg)
首先,通过hash函数获得对象指针对应的SideTable的下标,从SideTables中取得SideTable。
然后,通过hash函数获得对象指针对应的引用计数所在下标,从SideTable中的引用计数表里获取对应的引用计数。
最后进行加一操作
![](https://img.haomeiwen.com/i2537311/dcc4e75e13c704d8.jpg)
最后两位分别表示:对象是否正在销毁;对象是否有弱引用。(因此取引用计数值最后需要右移两位)
![](https://img.haomeiwen.com/i2537311/6fa6c3940733f5f0.jpg)
首先,通过hash函数获得对象指针对应的SideTable的下标,从SideTables中取得SideTable。
然后,通过hash函数获得对象指针对应的引用计数所在下标,从SideTable中的引用计数表里获取对应的引用计数。
最后进行减一操作
![](https://img.haomeiwen.com/i2537311/5f3b9b4c297a9a2d.jpg)
首先,通过hash函数获得对象指针对应的SideTable的下标,从SideTables中取得SideTable。
定义一个局部变量,指定为1。
hash查找得到对象指针对应的引用计数。
最后将查找结果向右便宜,再加上上面的局部变量1,返回。
(这里解释了为什么alloc出来的对象引用计数为1,因为刚alloc出来,表里是没有这个对象的引用计数的,那么就是0,加上1,结果就是1)