Swift 中的 weak 和 unowned"
使用 weak 和 unowned 关键字,我们可以避免所谓的循环引用。在这篇文章中,我们将讨论两者之间的差异。 何为循环引用?我曾在 “A Trick To Discover Retain Cycles” 博客一文中强调了内存管理的重要性,即使 ARC 已经为你分忧解难了: 首先,我们创建两个视图控制器: // ModelObject 类内容 import Foundation protocol ModelObjectDelegate: class { } class ModelObject { var delegate: ModelObjectDelegate? } // SecondViewController 类内容 import UIKit class SecondViewController: UIViewController,ModelObjectDelegate { var modelObject: ModelObject? override func viewDidLoad() { super.viewDidLoad() modelObject = ModelObject() modelObject!.delegate = self } @IBAction func closeButtonPressed(sender: UIButton) { dismissViewControllerAnimated(true,completion: nil) } } 准备工作完毕,现在来测试下内存管理:首先我们释放掉(dismiss)
现在,释放掉
如图所示: Weak为了避免这种情况发生,我们可以将引用关系声明为 import Foundation protocol ModelObjectDelegate: class { } class ModelObject { weak var delegate: ModelObjectDelegate? } 现在对象关系图应该看起来这样:
由于 Unowned此外你还可以使用 import Foundation protocol ModelObjectDelegate: class { } class ModelObject { //译者注:swift 要求变量一定要有初始值 // 可选类型默认初始值为 nil unowned var delegate: ModelObjectDelegate init(delegate:ModelObjectDelegate) { self.delegate = delegate } } 根据属性是否为可选类型,你可以在 参考A Trick To Discover Retain Cycles
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |