1、内存管理
Swift是通过引用计数(ARC)来管理内存的
1.1、swift源码查看
查找过程如下
1、HeapObject
类中的 refCounts
变量记录引用计数
2、
InlineRefCounts
为模板类,类型为RefCounts<InlineRefCountBits>
3、
RefCounts
类内部存储了InlineRefCountBits
4、查找
InlineRefCountBits
,InlineRefCountBits
由泛型RefCountBitsT<RefCountIsInline>
类型定义5、最终查找类
RefCountBitsT
,构造函数为RefCountBitsT()
6、通过查找64位结构体,查找到对应的值
RefCountBitsT
函数对应的入参位域运算分别如下strongExtraCount
: 0unownedCount
: 1StrongExtraRefCountShift
: 33,(左移33位)(强引用次数)PureSwiftDeallocShift
: 1,(左移0位)(析构次数)UnownedRefCountShift
: 1,(左移1位)(无主引用次数)
1.2、代码实际操作
1、如下的代码断点查看
断点在108处,
0x0000000400000003
结合上面的
RefCountBitsT
函数,0x0000000400000003
,代表PureSwiftDeallocShift
为1,UnownedRefCountShift
为1,StrongExtraRefCountShift
为2