iOS中block详解|iOS中block详解 weakSelf , strongSelf
在block中避免循环引用
我们知道,在使用block的时候,为了避免产生循环引用,通常需要使用weakSelf和strongSelf.如:
__weak typeof(self) weakSelf = self;
[self setBlock:^(int score) {
__strong typeof(weakSelf) strongSelf = weakSelf;
if(strongSelf){
//.....
}
}];
什么时候在block中使用self,而不用使用weakSelf
当block本身不被self持有,而被别的对象持有,同时不产生循环引用的时候,就不需要使用weakSelf. ForExcemple:
[UIView animateWithDuration:0.45 animations:^{
self.schoolName = @"ZJJ";
}];
【iOS中block详解|iOS中block详解 weakSelf , strongSelf】block持有了self,因为self不持有block,所以不产生循环引用,就不需要使用weakSelf。当动画结束是UIView会结束持有这个block,如果没有别的对象持有block的话,block就会被释放掉,从而block会释放掉对self的持有。整个内存引用关系被解除。
为什么有时候block里面需要引入strongSelf
在block中先引入一个strongSelf,是为了避免在block执行过程中,突然出现self被释放的情况,这样很容易出现逻辑问题,甚至闪退。
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募
- 2020-04-07vue中Axios的封装和API接口的管理