我们是否需要在ARC的UIAnimationBlocks中使用__weak self?

我们是否需要在UIAnimation块中使用__weak self,如下所示? 如果我们不指定自我弱,它是否会产生保留周期问题?

[UIView animateWithDuration:animationDuration delay:0 options:UIViewAnimationCurveEaseInOut animations:^{ [self doSomething]; } completion:^(BOOL finished) { if (finished) { [self doSomething]; } }]; 

我也对以下场景感到困惑。 有什么想法吗? 请分享您的意见。

 [self.navController dismissViewControllerAnimated:animated completion:^{ [self doSomething]; }]; 

我们应该在这里使用弱者吗?

这不是保留周期。 保留周期将是

 self -> block -> self 

在这种情况下,我们有

 animation framework -> block block -> self 

第一个保留只是临时的 – 当动画结束时块被释放。 即使发生保留周期,它也只是暂时的,并且不会阻止对象释放。

当保留周期可用时,您需要使用__weak 。 这不是那种情况,因为自动不会保留动画块。

另一种使用__weak是一个延长的动作,它将在完成后调用我们的块,并且在此动作期间可以释放self 。 例如,某些网络请求将在完成块中调用视图控制器的接口更新。 用户可以在请求期间退出我们的屏幕 在这种情况下,不需要用块来保持self ,最好使用弱自我。 但是使用动画块也不是这种情况。

不,它不会创建保留周期,因为块(闭包)不附加到self
有关更多信息,请查看Apple的自动参考计数 。

Interesting Posts