不知道什么时候开始,写代码只要有block就在block里面写如下代码:
__weak __typeof(self) weakSelf = self;
[self dismissViewControllerAnimated:YES completion:^{
__strong __typeof(weakSelf) strongSelf = weakSelf;
[strongSelf cancelSafeDeviceBinding];
}];
首先解释一下,为什么外面使用weakSelf?
如果self持有block,block里也持有self,这样就会造成循环引用,所以我们使用weakSelf。
为什么block里面又使用strongSelf?
访问self的时候我们使用一个临时的强指针来访问self,这样在整个block执行期间,可以保证self对象不会被销毁,同时,block调用完后,临时的强指针被销毁,一切又回归原来的样子。这样既能保证整个block执行期间,self对象不会被销毁,又能保证不会产生循环引用。
但是上面的代码,虽然block里面引用了self,但是self并没有引用block,所以上面的代码没有循环引用,没必要使用weakSelf,正确写法如下:
[self dismissViewControllerAnimated:YES completion:^{
[self cancelSafeDeviceBinding];
}];
关于block的循环引用,具体可参考:www.jianshu.com/p/5be4b1ca5…