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被释放的情况,这样很容易出现逻辑问题,甚至闪退。

    推荐阅读