Swift-Interview-questions
Swift-Interview-questions copied to clipboard
关于Swift面试题中的 第2点 的疑问
2.理解Swift值类型的写时复制 在结构体内部用一个引用类型来存储实际的数据,在不进行写入操作的普通传递过程中,都是将内部的reference的应用计数+1,在进行写入操作时,对内部的reference做一次copy操作用来存储新的数据,防止和之前的reference产生意外的数据共享。
现有这种情况:
class A {
deinit {
print("A deinited")
}
}
struct B {
let a: A
var count = 1
}
创建变量 var b1,然后赋值给var b2,然后对b1进行写入操作 b1.count = 2,然而b1 和 b2还是引用同一个A实例,“A deinited”只输出一次。应该并没有文章所说的"对内部的reference做一次copy操作用来存储新的数据,防止和之前的reference产生意外的数据共享"吧。
b1和b2引用同一个A实例,不管引用多少次 最后释放 所以“A deinited” 只会输出一次。结构体内部如果都是值类型的话,默认自带写时复制功能,在使用自定义引用类型 是需要自己实现写时复制这个功能的,可以结合isKnownUniquelyReferenced这个函数了解下