0

我有 Swift 结构,其中包含一个可变类,如下所示:

struct Foo {
  var bar: BarClass?

  mutating func foobar() {
     let bar = BarClass()
     self.bar = bar
  }
}

在看到一些奇怪的行为后,我在 init 和 deinit 上添加了一条语句来打印 BarClass() 的地址。在第二次调用 foobar 时,我希望在第一个 init 的地址上看到 deinit,例如:

初始化 X,初始化 Y,初始化 X。

相反,我看到了 init X、init Y、deinit Y。

这是否仅仅意味着新分配的 BarClass() 的内容被复制到了原始文件中?那么,除了地址之外,结果是否与新栏替换原来的一样,原来的被释放了?

或者,最好只调用一次 BarClass() 并让 foobar() 显式重置其内容。

4

1 回答 1

1

将问题缩小到测试用例后,我发现了问题。我错误地创建了结构的副本,认为它是一个参考。因此,新的 BarClass 并没有破坏 previous,因为 previous 仍然被结构的原始副本引用。

该用例试图以最小的更改向现有代码库添加一些功能。

感谢您的反馈/确认,我需要对此进行更多研究。

于 2019-07-18T15:45:10.697 回答