iOS-17-系统的动画block中的block为什么不用弱引用?

UIView的动画block不会造成循环引用的原因就是,这是个类方法,当前控制器不可能强引用一个类,所以循环无法形成。
不需要,之所以需要弱引用本身,是因为怕对象之间产生循环引用,引起程序的崩溃!
所谓“引用循环”是指双向的强引用,所以那些“单向的强引用”(block 强引用 self )没有问题,比如这些:

1.  [UIView animateWithDuration:duration  animations:^{ 
[self.superview layoutIfNeeded]; 
}]; 
2.  [[NSOperationQueue mainQueue] addOperationWithBlock:^{
 self.someProperty = xyz; 
}]; 
3.  [[NSNotificationCenter defaultCenter] addObserverForName:@"someNotification" 
                          object:nil 
                           queue:[NSOperationQueue mainQueue]
                           usingBlock:^(NSNotification * notification) {
                                              self.someProperty = xyz; 
}];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,573评论 6 30
  • Block Block底层原理实现 首先我们来看四个函数 造成这样的原因是:传值和传址。为什么说会有传值和传址,把...
    b485c88ab697阅读 7,912评论 0 41
  • 在iOS实际开发中常用的动画无非是以下四种:UIView动画,核心动画,帧动画,自定义转场动画。 1.UIView...
    请叫我周小帅阅读 3,169评论 1 23
  • 1、Block底层原理实现 首先我们来看四个函数 造成这样的原因是:传值和传址。为什么说会有传值和传址,把.m编译...
    iLees阅读 807评论 0 4
  • A little bear and rabbit lived in a village, they had ...
    1J46阅读 146评论 0 0