【发布时间】:2018-06-06 03:55:27
【问题描述】:
有这种事吗?下面这两个有区别吗?一个比另一个更“正确”吗?
所有对象都是self(假设是视图控制器)的属性,并且与self 具有相同的生命周期。我们可以引入一个生命周期比self 更短的对象,即weak,但同样的问题也适用。
objectOne.doSomething { [unowned self] in
self.objectTwo.finish()
self.tableView.reloadData()
// self.someDelegate?.didFinishSomething()
}
对
objectOne.doSomething {
[unowned objectTwo = self.objectTwo,
unowned tableView = self.tableView
// weak someDelegate = self.delegate
] in
objectTwo.finish()
tableView.reloadData()
// someDelegate?.didFinishSomething()
}
苹果在their docs中有这个例子:
lazy var someClosure: () -> String = {
[unowned self, weak delegate = self.delegate!] in
// closure body goes here
delegate?.doSomething()
}
在这种情况下,delegate 的生命周期可能比 self 短,但为什么不这样使用呢?
lazy var someClosure: () -> String = {
[unowned self] in
// closure body goes here
self.delegate?.doSomething()
}
【问题讨论】:
标签: ios swift memory-management closures