Shi*_*zam 9 memory-management optional swift
如果我宣布[weak self]一个封闭和参考self的self?内部UIView.animateWithDuration应用程序会崩溃:
someFunc() { [weak self] (success) -> Void in
UIView.animateWithDuration(0.25) {
self?.someView.alpha = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
用一个 message sent to deallocated instance
但如果我提前打开自己,那就不会
someFunc() { [weak self] (success) -> Void in
if let weakself = self {
UIView.animateWithDuration(0.25) {
weakself.someView.alpha = 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我认为我引用弱自我的方式并不重要,因为它应该"正好"选择性地解开self?.对于上下文,这是在UICellView我离开时释放的UICollectionViewController
编辑:提交苹果的错误:#23492648
我认为这里的问题很self特别。您已将对weakly 的引用传递self到匿名函数中以防止保留循环,但在这个故事中并没有真正的Optional 包装self。因此,语法糖self?.someView.alpha = 1\xe2\x80\x94 并记住,它是语法糖 \xe2\x80\x94 不起作用。
苹果可能会将此视为一个错误;或者可能不是。但无论哪种方式,解决方案都是按照公式化地执行第二个示例中所做的操作:明确地进行弱强舞蹈进行弱强舞蹈。
\n| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |