标签:bsp dos 简单 strong nim with 还需要 关系 color
问题
我们知道,在使用 block 的时候,为了避免产生循环引用,通常需要使用 weakSelf 与 strongSelf,写下面这样的代码:
__weak typeof(self) weakSelf = self; [self doSomeBlockJob:^{ __strong typeof(weakSelf) strongSelf = weakSelf; if (strongSelf) { ... } }];
那么请问:什么时候在 block 里面用 self,不需要使用 weak self?
当 block 本身不被 self 持有,而被别的对象持有,同时不产生循环引用的时候,就不需要使用 weak self 了。最常见的代码就是 UIView 的动画代码,我们在使用 UIView 的 animateWithDuration:animations
方法 做动画的时候,并不需要使用 weak self,因为引用持有关系是:
因为 self 并不持有 block,所以就没有循环引用产生,因为就不需要使用 weak self 了。
[UIView animateWithDuration:0.2 animations:^{ self.alpha = 1; }];
当动画结束时,UIView 会结束持有这个 block,如果没有别的对象持有 block 的话,block 对象就会释放掉,从而 block 会释放掉对于 self 的持有。整个内存引用关系被解除。
如果觉得上面的问题太简单,可以想想下面两个题目:
iOS 面试题(二):什么时候在 block 中不需要使用 weakSelf --转自唐巧
标签:bsp dos 简单 strong nim with 还需要 关系 color
原文地址:http://www.cnblogs.com/weiboyuan/p/6143526.html