Block篇-类中带Block的方法为什么不会循环引用.

说到Block,大家最头疼的事情肯定就是循环引用了.
但是,用到带Block的类方法的时候却并没有被循环引用所困扰,那又是为何呢.
下面,用UIView的块动画来举个例子.

	+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

比如我们在控制器里面使用了这个块动画.一切都很完美,是吧.好.我们现在打开Block.在animations里面写一点类似下面的代码.

	self.xxx.backgroundColor = [UIColor redColor];

然而.我们销毁该视图(比如控制器pop了).发现dealloc还是走的.那么,这是为什么呢.
UIView实例强引用了self.xxx是没有问题的.self强引用了xxx也是没问题的.但是self,没有强引用UIView.那么,不能形成闭环.也就没有循环引用了.

那什么时候会循环引用呢.比如xxx有个block的属性.self.xxx.block = {}给他赋值.执行以下就会发现循环引用了(前提是在{}内使用了self.xxx).因为self引用了xxx.xxx引用了self.闭环了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值