据我所知,当我们使用块时,我们必须创建一个__weak
使用代码运行该方法的对象实例,然后创建__strong
一个以保持弱者存活:
__weak __typeof(self) weakSelf = self;
[self setHandler:^{
__strong __typeof(weakSelf) strongSelf = weakSelf;
[strongSelf doSomething];
}];
直到这里很清楚,如果我们从块内部调用 self ,它将自行保留并且永远不会释放。但我的问题是当块在类方法(而不是实例方法)中时如何处理相同的情况,例如在 UIView 动画中:
[UIView animateWithDuration:...
delay:...
options:...
animations:^{
// [self someMethod] or weak/strong reference to self [strongSelf someMethod]?
}
completion:^(BOOL finished) {
// [self someMethod] or weak/strong reference to self [strongSelf someMethod]?
}];
在这些情况下,我已经看到了几个使用弱/强引用 self 的示例,但是由于没有从任何实例调用完成,它应该保留 self,我错过了什么吗?谢谢!