[英]Retain Cycle on Class Methods Blocks
据我所知,当我们使用块时,我们必须创建一个使用代码运行该方法的对象的__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]?
}];
在这些情况下,我已经看到几个使用弱/强引用自我的示例,但是由于没有从任何实例调用完成来保留自我,因此我是否缺少某些东西? 谢谢!
当您的对象(自身)对块具有强引用,而块具有对您的对象的引用时,您需要使用weakSelf。
如果您不拥有UIView类方法,请参考此块,以便您可以在其中使用self而不创建保留周期。 该块将执行,然后将被释放。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.