gpt4 book ai didi

xcode - Swift 3 和 iOS 10 错误内存泄漏错误

转载 作者:行者123 更新时间:2023-12-04 20:33:52 24 4
gpt4 key购买 nike

与 iOS 10 和 Swift 3 一起使用时,Xcode 8 中似乎存在(错误的)内存泄漏错误。

以下代码报告了 Instruments 和 Xcode 8 内存调试器中的内存泄漏:

class SomeClass: NSObject {
var view: SomeView!

deinit {
print("SomeClass deinit")
}
}

class SomeView: UIView {
weak var reference: SomeClass?

deinit {
print("SomeView deinit")
}
}

class ViewController: UIViewController {
var someProperty: SomeClass?

override func viewDidLoad() {
super.viewDidLoad()

let c = SomeClass()
let v = SomeView()
c.view = v
v.reference = c

someProperty = c
}
}

最佳答案

我尝试了不同的变体来确认它确实是一个错误,我的发现是:

  • 当您不分配时 c在示例代码中为 someProperty ,两个实例都将在各自的 deinit 中打印字符串s。真正的强引用循环不会取消。
  • SomeClass不继承自 NSObject ,这个bug不会发生。
  • 使用 Swift 2.2 时,这不会发生。
  • 使用 iOS 9- 时,不会发生这种情况。
  • 曾经someProperty设置为 nil在代码的某处,两个实例都是 deinit编。 Xcode 8 内存调试器确认没有内存泄漏。然而,在 Instruments 中,这种变化并没有反射(reflect)出来——这是理所当然的,因为真正的内存泄漏可能不会得到解决。

  • 仅供引用,仅当它分配给 UIViewController 的属性时才会发生这种情况。 .我最初是在单例对象中发现这种行为的。

    关于xcode - Swift 3 和 iOS 10 错误内存泄漏错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39886126/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com