Chr*_*ris 6 functional-programming memory-management retain-cycle swift swift2
如果需要引用self闭包内部,最好将其作为weak或unowned防止保留循环.
如果我self直接传递属于的函数,它会导致保留周期吗?或者它是否需要嵌套在闭包内以削弱自我?
直接通过
UIView.animateWithDuration(0.3,
delay: 0.0,
usingSpringWithDamping: 0.7,
initialSpringVelocity: 0.1,
options: .CurveEaseOut,
animations: self.view.layoutIfNeeded, // does this cause retain cycle?
completion: nil)
Run Code Online (Sandbox Code Playgroud)
包裹在一个封闭物中
UIView.animateWithDuration(0.3,
delay: 0.0,
usingSpringWithDamping: 0.7,
initialSpringVelocity: 0.1,
options: .CurveEaseOut,
animations: { [unowned self] in
self.view.layoutIfNeeded()
},
completion: nil)
Run Code Online (Sandbox Code Playgroud)
这不应该创建一个引用循环,但即使这样做也没关系。引用循环只会存在到动画完成为止,此时它将被破坏。创建短暂的引用循环实际上是有益的,因为它确保目标在调用的生命周期中继续存在。周期本身并不是一个问题。牢不可破的循环就是问题所在。
这不会形成循环有两个原因。首先,不存在“循环”。当然,系统将引用一些东西(稍后会详细介绍)。但是“引用那个东西的东西”在哪里?说得更清楚一点,就算引用了动画系统self,那又如何self引用动画系统呢?没有循环。
没有循环的另一个原因是你self无论如何都没有传递到动画系统。你的路过self.view.layoutIfNeeded。在 Swift 中,这相当于:
UIView.layoutIfNeeded(self.view)
Run Code Online (Sandbox Code Playgroud)
你不会经过self这里。你正在经过一个风景。现在,动画系统几乎肯定会保留对该视图的引用,直到动画完成,但这没关系。那还不是一个循环。
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |