繁体   English   中英

保留类方法块上的循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM