Bug区

2034-内存泄露问题-block 循环引用

2017-02-24  本文已影响5人  ArrQing

1 在传进去 block 块儿 之前 防止 循环引用
weakself 引用 来调用 self 的 方法 变量
__weak typeof(self) weakSelf = self;
或者
__weak MyController *weakSelf = self

执行block方法体的时候
转换为强引用
MyController* strongSelf = weakSelf; if (!strongSelf) { return; }

weakself 的 宏定义

define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;

注释:

001、block方法常用声明:@property (copy) void(^MyBlock)(void); 如果超出当前作用域之后仍然继续使用block,那么最好使用copy关键字,拷贝到堆区,防止栈区变量销毁。

002、创建block匿名函数之前一般需要对self进行weak化,否则造成循环引用无法释放controller:

__weak MyController weakSelf = self 或者 __weak __typeof(self) weakSelf = self;
执行block方法体的时候也可以转换为强引用之后再使用:MyController
strongSelf = weakSelf; if (!strongSelf) { return; }

上一篇下一篇

猜你喜欢

热点阅读