这会创建一个保留周期吗?

时间:2014-07-07 23:09:15

标签: ios objective-c

我了解了保留周期然后我正在观看这个视频教程,但我觉得他写的代码包含保留周期。 所以我想发帖就是在这里征求意见。在代码段下方:

        [UIView transitionWithView:self.view duration:.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
        self.myImageView.image = randomDog.image;
        self.BreedLabel.text = randomDog.breed;
        self.nameLabel.text = randomDog.name;
    } completion:^(BOOL finished) {

    }]; 

因为在块内部正在使用self,并且此块将保持self作为其强指针。

我在某处读到,如果需要在块的一侧使用self,那么创建weekSelf总是很好的做法

id (nonatomic, weak) weakSelf;
weakSelf = self;

然后在块内使用weakSelf。

如果我理解正确的概念,请帮助我。提前谢谢。

1 个答案:

答案 0 :(得分:3)

在这种情况下,您不会遇到保留周期问题。

你确实有保留周期,但它是暂时的,不会引起任何问题。

保留图就像(A -> B表示A保留B)

self -> view -> animationBlock -> self

但是在执行动画块之后,它将被销毁并保留图形

self -> view

并且一切都很好


打破保留周期的正确语法是

__weak __typeof__(self) weakSelf = self;
^ { // inside block
    __typeof__(self) strongSelf = weakSelf;
   // use strongSelf
}

或者您可以使用libextobjc

中的@weakify@strongify