与 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不会发生。 someProperty
设置为 nil
在代码的某处,两个实例都是 deinit
编。 Xcode 8 内存调试器确认没有内存泄漏。然而,在 Instruments 中,这种变化并没有反射(reflect)出来——这是理所当然的,因为真正的内存泄漏可能不会得到解决。 仅供引用,仅当它分配给
UIViewController
的属性时才会发生这种情况。 .我最初是在单例对象中发现这种行为的。
关于xcode - Swift 3 和 iOS 10 错误内存泄漏错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39886126/