在使用block进行一些回调的时候,为了防止循环引用,我们常常用这样代码来处理:
__weak typeof(self)weakSelf = self;
但是,在阅读一些优秀的第三方框架的源码的时候,如AFNetworking,有时我们也会遇到这样的写法:
__block typeof(self)weakSelf = self;
这是因为Block可以访问局部变量,但是不能修改,如果修改局部变量,需要加__block.
PS:一般使用__block都是用到基本类型的变量
__strong typeof(self)strongSelf = weakSelf;
偶尔,还会见到,这种写法,多用在block里面
原因:有些回调调用的时候,不希望所引用的对象释放掉,就会用到这种写法,在AFNetworking里面有很多,或者多次使用weakSelf时一般会用__strong再引用一下.
网友评论