Ano*_*ude 9 animation uiview ios swift
经过一些研究,我发现我的应用程序使用了太多的能量,因为UIView整个应用程序中有几个动画,我在完成块中捕获了相关的动画UIViewController,而没有对其进行弱引用。
所以实际上,我改变了这一点:
func animate() {
UIView.animate(withDuration: 0.3, animations: {
self.label.alpha = 0.5
}) { _ in
self.animate()
}
}
Run Code Online (Sandbox Code Playgroud)
进入这个:
func animate() {
UIView.animate(withDuration: 0.3, animations: {
self.label.alpha = 0.5
}) { [weak self] _ in
self?.animate()
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想知道我是否需要对animation块(self.label.alpha = 0.5那个)做同样的事情?
感谢您的帮助
不,在这种情况下不需要。动画和完成不会自行保留,因此不存在强保留周期的风险。
重复是否有必要在 UIView.animateWithDuration(...) 的闭包中使用 [unowned self]?
Fat*_*tie -4
当然,你确实需要在那里使用“弱自我”的概念。
事实上,请注意:在这种情况下,VC 在动画过程中被丢弃确实很常见……所以事实上,这是您“最需要”使用弱自我想法的地方之一。在动画中忘记这一点是项目中非常常见的错误。
顺便说一下,当你需要弱自我时,这里有一个方便的语法:
func animate() {
UIView.animate(withDuration: 0.3, animations: { [weak self] in
guard let self = self else { return print("gotchya!") }
self.label.alpha = 0.5
}) { [weak self] in
guard let self = self else { return print("gotchya!") }
self.animate()
}
}
Run Code Online (Sandbox Code Playgroud)
添加这一行..
guard let self = self else { return }
Run Code Online (Sandbox Code Playgroud)
.. 看起来有点啰嗦,但是,这意味着您不需要“?” 每次在长块中使用“self”之后。
通常,在这样的块中,您会多次使用“self ...”,并且仅使用“let self = self”习惯用法似乎更一致。
因此,即使块中只有一行代码(如您的两个示例中所示),这也是一种在各处绝对一致并保持简单的好方法。
请注意,每当您有一个时,{ return }您都可以添加一条打印语句,以便您知道开发过程中发生了什么。
.... { [weak self] in
guard let self = self else { return print("I avoided a crash, woot!") }
Run Code Online (Sandbox Code Playgroud)
或者
.... { [weak self] in
guard let self = self else { return print("logical disaster near line 66") }
Run Code Online (Sandbox Code Playgroud)
你不必这样做,“{ return }”就可以了。这只是为了您的方便。
如果您发现“self = self”这个习语令人困惑……老实说,请不要担心。总是使用这个习语。这确实是随处可见的“标准”事物。
始终追求代码库的简单一致性!
这是来自一位帅气名单成员的有趣问答:弱小的自我去哪儿了?
后来还需要担心这种混乱:弱引用和无主引用之间有什么区别?
| 归档时间: |
|
| 查看次数: |
12209 次 |
| 最近记录: |