使用weak或unowned关键字避免循环引用
示例代码:
class Person { var name: String var age: Int var closure: (() -> Void)?
init(name: String, age: Int) {
self.name = name
self.age = age
}
deinit {
print("\(name)被销毁了")
}
}
var person1: Person? = Person(name: "张三", age: 20) var person2: Person? = Person(name: "李四", age: 22)
person1?.closure = { // 闭包中使用了person1变量 print("我是(person1!.name),今年(person1!.age)岁") }
person2?.closure = { [weak person2] in // 使用weak关键字避免循环引用 guard let strongPerson2 = person2 else { return } print("我是(strongPerson2.name),今年(strongPerson2.age)岁") }
person1 = nil // 输出:“张三被销毁了”
person2?.closure?() person2 = nil // 输出:“李四被销毁了”