我了解了保留周期然后我正在观看这个视频教程,但我觉得他写的代码包含保留周期。 所以我想发帖就是在这里征求意见。在代码段下方:
[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。
如果我理解正确的概念,请帮助我。提前谢谢。
答案 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