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; }