retain坯台、release 的實(shí)現(xiàn)機(jī)制奋刽?
- Retain的實(shí)現(xiàn)機(jī)制尺棋。
SideTable& table = SideTables()[This];
size_t& refcntStorage = table.refcnts[This];
refcntStorage += SIZE_TABLE_RC_ONE;
- Release的實(shí)現(xiàn)機(jī)制缸夹。
SideTable& table = SideTables()[This];
size_t& refcntStorage = table.refcnts[This];
refcntStorage -= SIZE_TABLE_RC_ONE;
二者的實(shí)現(xiàn)機(jī)制類似匀油,概括講就是通過第一層 hash 算法,找到 指針變量 所對(duì)應(yīng)的 sideTable腥椒。然后再通過一層 hash 算法阿宅,找到存儲(chǔ) 引用計(jì)數(shù) 的 size_t候衍,然后對(duì)其進(jìn)行增減操作。retainCount 不是固定的 1家夺,SIZE_TABLE_RC_ONE 是一個(gè)宏定義脱柱,實(shí)際上是一個(gè)值為 4 的偏移量