如果我在[weak self]
内的self
上声明self?
关闭并引用UIView.animateWithDuration
,则应用会崩溃:
someFunc() { [weak self] (success) -> Void in
UIView.animateWithDuration(0.25) {
self?.someView.alpha = 1;
}
}
使用message sent to deallocated instance
但如果我提前打开自己,那就不会
someFunc() { [weak self] (success) -> Void in
if let weakself = self {
UIView.animateWithDuration(0.25) {
weakself.someView.alpha = 1;
}
}
}
为什么会这样,我认为我引用弱自我的方式无关紧要,因为它应该“只是”正确地解包self?
。对于上下文,这是在UICellView
中完成的,当我离开UICollectionViewController
编辑:提起苹果的错误:#23492648
答案 0 :(得分:3)
我认为这里的问题是self
很特别。您已将self
的引用弱地传递到匿名函数以防止保留周期,但在此故事中并没有真正的可选包装self
。因此,句法糖self?.someView.alpha = 1
- 记住,它 仅仅是语法糖 - 不起作用。
苹果可能会认为这是一个错误;或者可能不是。但无论哪种方式,解决方案都是在公式上完成你在第二个例子中所做的事情:明确地执行弱强舞 。