__block 和 weak 在ARC下的主要事项

1、在ARC下,成员变量使用_block修饰,在block里面访问会造成retain cycle,不管是用self.xxx或者_xxxx;
使用weak不会造成retain cycle
2、在ARC下,外部局部变量使用_block,会根据外部变量的类型,在block会进行一次拷贝,值类型就会拷贝值,指针类型就是改变指向的地址,不会造成cycle

3、MRC中使用block,为了避免在block中retain外部的变量导致引用计数的增加,我们往往要在block中使用的变量前加上 __block 关键字,这样就不会retain了,比如__block typeof(self) weakSelf = self;

4、一般用weak修饰就可以解决问题 block中如果执行耗时操作或者是VC释放之后任然需要完成的操作 block外部用weak修饰之后 在block中还需要用strong再做一个强引用

你可能感兴趣的:(__block 和 weak 在ARC下的主要事项)