在使用iOS 10& E时,Xcode 8中似乎存在(错误的)内存泄漏错误。斯威夫特3。
以下代码报告了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
}
}
答案 0 :(得分:3)
我尝试了不同的变体来确认它确实是一个错误,我的发现是:
c
分配给someProperty
,则两个实例都会在各自的deinit
中打印该字符串。一个真正强大的参考周期不会消失。SomeClass
未从NSObject
继承时,此错误不会发生。someProperty
设置为nil
后,两个实例均为deinit
。 Xcode 8内存调试器确认没有内存泄漏。然而,在仪器中,这种变化并没有得到反映 - 这是正确的,因为真正的内存泄漏可能无法得到解决。仅供参考,仅当它被分配到UIViewController
的属性时才会发生这种情况。我最初在单个对象中发现了这种行为。
答案 1 :(得分:0)
似乎已修复iOS 10.3(第一个测试版)和Xcode 8.3(第一个测试版)。