谁能解释一下为什么这不会泄漏?
我self
在 a 内捕获,closure
因此我将有两个指向对方的强指针,因此,deinit
永远不应为 Person 对象调用该消息。
首先,这是我的班级Person:
class Person {
var name: String
init(name: String) { self.name = name }
deinit { print("\(name) is being deinitialized") }
}
这是我的 ViewController 的实现:
class ViewController: UIViewController {
var john:Person?
func callClosureFunction( closure:(name:Bool) -> () ) {
closure(name: true)
}
override func viewDidLoad() {
super.viewDidLoad()
john = Person(name:"John")
self.callClosureFunction { (name) in
self.john?.name = "John Appleseed"
self.john = nil
// xcode prints - John Appleseed is being deinitialized
}
}
}
我希望能够通过以下方式解决问题:
self.callClosureFunction { [weak self] (name) in ...
但这甚至没有必要。为什么?