美文网首页Bug区
2034-内存泄露问题-block 循环引用

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

作者: ArrQing | 来源:发表于2017-02-24 09:54 被阅读5次

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

    相关文章

      网友评论

        本文标题:2034-内存泄露问题-block 循环引用

        本文链接:https://www.haomeiwen.com/subject/spniwttx.html