block不需要__weak的几种情况

1、UIView 的 animation动画块使用了Block,内部使用self不会循环引用,为什么呢

 

答:UIView 动画块是类方法,不被self持有,所以不会循环引用。

 

2、Monsary也使用了Block来设置控件的布局,Block内部使用self,为什么不会循环引用呢

 

答:看源码可以看出,Monsary使用的Block是当做参数传递的,即便block内部持有self,设置布局的view持有block,但是block不持有view,当block执行完后就释放了,self的引用计数-1,所以block也不会持有self,所以不会导致循环引用。

 

3、reactiveCocoa如果不使用@weakify @strongify,会循环引用,两个宏就等于下边代码:

__weak typeof(self) weakSelf = self;

__strong typeof(weakSelf) strongSelf = weakSelf;

 

posted @ 2020-04-28 11:33  weizonglei  阅读(320)  评论(0编辑  收藏  举报