当与iOS 10 & Swift 3一起使用时,Xcode 8中似乎存在(误)内存泄漏错误。
以下代码报告了仪器和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
}
}发布于 2016-10-06 01:30:55
我尝试过不同的变体来确认它确实是一个错误,我的发现是:
c分配给someProperty时,两个实例都会在各自的deinit中打印字符串。真正的强引用周期不会出现。SomeClass不从NSObject继承时,这个bug就不会发生。someProperty在代码中的某个位置被设置为nil,两个实例都是deinit编辑的。Xcode 8内存调试器确认没有内存泄漏。然而,在“仪器”中,这种变化并没有得到反映--这是正确的,因为真正的内存泄漏可能无法得到解决。FYI,这不只是当它被分配给UIViewController的属性时才会发生。我最初在一个单例对象中发现了这种行为。
发布于 2017-01-25 10:07:12
似乎修正了iOS 10.3 (第一个测试版)和Xcode 8.3 (第一个测试版)。
https://stackoverflow.com/questions/39886126
复制相似问题