最早的时候可能先了解了引用计数,但是其实从iphone全面升级到64为机器之后,内存管理有下列三种方式了
1.散列表(引用计数表、weak表)
SideTables 表在 非嵌入式的64位系统中,有 64张 SideTable 表
每一张 SideTable 主要是由三部分组成。自旋锁、引用计数表、弱引用表。
全局的 引用计数 之所以不存在同一张表中,是为了避免资源竞争,解决效率的问题。
引用计数表 中引入了 分离锁的概念,将一张表分拆成多个部分,对他们分别加锁,可以实现并发操作,提升执行效率
2.TaggedPointer(针对类似于 NSNumber 的小对象类型)
这个是一个为了64位架构下节省内存和提高执行效率而提出的概念.
更详细的可以看这个地址
3.NONPOINTER_ISA(64位系统下)
第一位的 0 或 1 代表是纯地址型 isa 指针,还是 NONPOINTER_ISA 指针。
第二位,代表是否有关联对象
第三位代表是否有 C++ 代码。
接下来33位代表指向的内存地址
接下来有 弱引用 的标记
接下来有是否 delloc 的标记….等等