循环引用的概念,不做赘述,下面直接用一个小 demo,说明 swift 闭包产生的循环引用:
class ViewController: UIViewController {
// 声明一个闭包
var closure:(() -> ())?
override func viewDidLoad() {
super.viewDidLoad()
// 解决闭包循环引用
// 方式01(iOS 5.0)
// closure = {[weak self] () -> () in
//
// print(self?.view) // 要加 '?'
//
// }
// 方式02(iOS 4.0)
// closure = {[unowned self] () -> () in
//
// print(self.view) // 不加 '?'
//
// }
// 方式03
weak var weakSelf = self
closure = { () -> () in
print(weakSelf?.view)
}
}
// 重写 析构函数,看控制器是否被释放
deinit{
print("viewController挂了")
}
}
验证控制器是否被释放,在 sb 中嵌套一层 跳转关系,运行跳转即可.
具体可到下面地址 下载 小demo.
https://github.com/moon13sun/-