那么什么时候我们需要将weakSelf改为strong??
希望有经验的同学结合实例说明一下。?
提前感谢了。
检测代码中是否存在循环引用问题,可使用 Facebook 开源的一个检测工具 FBRetainCycleDetector
一般在block块内直接这样写没错
__strong typeof(self) strongSelf = weakSelf;
if (strongSelf) {
// ...
}
你可可以使用宏定义写法weakify
strongify
, 可参考http://www.jianshu.com/p/3d6c...
可以看看AFN的处理:weak strong dance,在block中,转为strong确保在执行block时,不会被释放。因为weak的生命周期更长,block执行完后,会转为weak。
__weak __typeof(self)weakSelf = self;
AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) {
__strong __typeof(weakSelf)strongSelf = weakSelf;
strongSelf.networkReachabilityStatus = status;
if (strongSelf.networkReachabilityStatusBlock) {
strongSelf.networkReachabilityStatusBlock(status);
}
};
4 回答4.2k 阅读
2 回答1.8k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.3k 阅读
1 回答1.2k 阅读
1 回答1.2k 阅读
用__strong是为了保证对象在block执行前不被释放.
Demo: A 控制器(present)跳转到B, B dismiss回来.block里面有
延时操作
.使用没
__strong
时, 在B控制器dismiss
,secondVC
释放为nil, 1.0秒后block执行, 此时weakVC
为nil.使用
__strong
, 调用dismiss
, 由于block
有强引用,secondVC
不被释放(不是nil), 1.0秒后执行完block, 释放vc.A控制器代码:
B控制器代码:
测试结果: