Swift-Interview-questions icon indicating copy to clipboard operation
Swift-Interview-questions copied to clipboard

关于Swift面试题中的 第2点 的疑问

Open kenny1269 opened this issue 1 year ago • 1 comments

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产生意外的数据共享"吧。

kenny1269 avatar Nov 24 '23 02:11 kenny1269

b1和b2引用同一个A实例,不管引用多少次 最后释放 所以“A deinited” 只会输出一次。结构体内部如果都是值类型的话,默认自带写时复制功能,在使用自定义引用类型 是需要自己实现写时复制这个功能的,可以结合isKnownUniquelyReferenced这个函数了解下

zlfyuan avatar Nov 24 '23 08:11 zlfyuan