我有一个包含如下可变类的Swift结构:
struct Foo {
var bar: BarClass?
mutating func foobar() {
let bar = BarClass()
self.bar = bar
}
}
看到一些奇怪的行为后,我放入一条语句以在init和deinit上打印BarClass()的地址。在第二次调用foobar时,我希望在第一个init的地址上看到deinit,例如:
init X,init Y,deinit X。
相反,我看到了init X,init Y,deinit Y。
这是否意味着新分配的BarClass()的内容已复制到原始文件中?那么,除了地址以外,结果是否与新的条形替换了原来的条形,并且原来的条形被释放了一样?
或者,最好只调用一次BarClass()并让foobar()显式重置其内容。
答案 0 :(得分:1)
将问题缩小到一个测试用例后,我发现了问题。我错误地创建了该结构的副本,以为它是参考。因此,新的BarClass不会破坏先前的版本,因为先前的版本仍被该结构的原始副本引用。
该用例试图以最小的更改将一些功能添加到现有代码库中。
感谢反馈/确认,我需要进一步研究。