美文网首页
block详解

block详解

作者: 愤怒小鸟飞呀飞 | 来源:发表于2018-05-22 16:46 被阅读0次

    __weak typeof(self) weakSelf = self;
    self.handler = ^{
    typeof(weakSelf) strongSelf = weakSelf;
    [strongSelf.obserable removeObserver:strongSelf
    forKeyPath:kObservableProperty];
    };
    问题:weak之后在strong,不还是循环引用么?

    从引用计数解释:__weak指针之后,block对self不在强应用,strong weakSelf之后,self的引用计数加一,block执行结束之后,self的引用计数减一

    如果block内部直接应用self,将在block初始化的地方,截获自动变量,生成一个strong指针指向self,如果block此时是成员变量,将会导致循环引用

    举个形象的例子:weak strong dance之后,把block视为另外一个对象,strong weakself相当于在对象内部建立了个局部变量,直接引用self相当于 block内部建立了个成员变量

    链接:https://juejin.im/entry/57b131d1c4c971005485d5a2

    相关文章

      网友评论

          本文标题:block详解

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