我定义了一个名为
Person
的类。这是我的代码: class Person {
var closure: (() -> ())?
var name: String
init(name: String) {
self.name = name
print("\(name) is being initialized")
}
deinit {
print("\(name) is being deinitialized")
}
}
然后我在名为ViewController
的类中使用Person
:
class ViewController: UIViewController {
var person = Person(name: "john")
let aStr = "john is a cute boy"
override func viewDidLoad() {
super.viewDidLoad()
person.closure = {
print("\(self.aStr)")
}
person.closure!()
}
}
在我看来,关于我的代码的记忆就像这样:
因此,从上面的图片可以看出,在我看来,这将在三个实例之间引起强引用循环,但我无法从Instruments
中获取任何泄漏信息,所以我有些困惑。
这段代码是否会引起强引用循环?
如果不是,那么ARC什么时候会释放Person
类的实例?Person
类中名为deinit
的方法从未被调用。