如果我的viewcontroller必须使用委托进行初始化,那么使用无主的方法是否存在任何危险呢?
使用弱似乎会引入函数失败的概率(见下文),尽管它不会崩溃。
在这种情况下,使用无主的会不安全吗?
class MyViewController: UIViewController
private weak var delegate: MyViewControllerDelegate?
init(delegate: MyViewControllerDelegat) {
self.delegate = delegate
}
func foobar {
delegate??
}
与
相比class MyViewController: UIViewController
private unowned var delegate: MyViewControllerDelegate
init(delegate: MyViewControllerDelegate) {
self.delegate = delegate
}
func foobar {
delegate.doAction()
}
答案 0 :(得分:3)
只要对该引用有效,就使用弱引用 在其一生中的某个时刻没有。相反,使用无主 当你知道引用永远不会为零时引用 已在初始化期间设置。
因此,在您的情况下,如果您知道代表将在整个生命周期中使用,那么请使用unowned
。
weak
和unowned
之间的区别在于,弱者可以是零,无主,不能为零。两者都不会添加到保留周期,只要您不释放代理,unowned
就没有危险。
答案 1 :(得分:2)
如果您的控制器必须使用委托进行初始化,并且控制器在没有它的情况下无法工作,那么unowned
是正确的解决方案。但是,您必须确保在取消分配控制器之前永远不会释放委托。
通常,代表应该是您的控制器的所有者。
但是,使用weak
并不复杂:
delegate?.doAction()