英语不是我的母语,所以请原谅任何打字错误。我正在为我的问题使用翻译器。
看了《WWDC16 - Understanding Swift Performance》了解到,在堆上为类分配内存时,比在栈上多分配2个字
2个字的第一个字是指向那个类的类型信息的指针,第二个字是引用计数
为了验证这一点,我写了下面的代码:
class RefType {
var num1: Int
var num2: Int
init(num1: Int, num2: Int) {
self.num1 = num1
self.num2 = num2
}
}
func test() {
var ref1 = RefType(num1: 5, num2: 9) // 03 00
var ref2 = ref1 // 03 02
print(Unmanaged.passUnretained(ref1).toOpaque()) // 0x0000600000206a00
print("job done") // <- breakpoint
}
test()
通过
ref1
地址查看内存,得到如下结果:
以为创建类时传入的值
05
和09
被赋值,05
前面的词代表引用计数(第二块蓝色高亮)
为了确保,我添加了另一个引用
ref1
的变量并编写了提供的代码。
var ref1 = RefType(num1: 5, num2: 9) // 03 00
var ref2 = ref1 // 03 02
var ref3 = ref1 // added
虽然期望引用计数增加 1 并变为
03
,但它却是04
。
我不明白为什么每次添加新引用时它都会增加 2,以及前 4 个字节的
03 00 00 00
是什么意思??
03
)是什么意思我是新来的,信誉不够,只好用链接替换图片。感谢您的理解。