iOS-weakSelf和strongSelf

作者: li_礼光 | 来源:发表于2017-03-29 20:28 被阅读2289次
    __weak __typeof(self)weakSelf = self;    //1
    
    [self.context performBlock:^{      
    
            [weakSelf doSomething];          //2
    
            __strong __typeof(weakSelf)strongSelf = weakSelf;  //3
    
            [strongSelf doSomething];        
    
    }];
    

    关于block什么时候用这个weakSelf和strongSelf.

    如果直接在blog中调用对象会被block强引用,这个都是常识就不说了.

    1.使用__weak __typeof是在编译的时候,另外创建一个weak对象来操作self.
    
    2.因为weakSelf和self是两个内容,doSomething有可能就直接对self自身引用计数减到0了.
      所以在[weakSelf doSomething]的时候,你很难控制这里self是否就会被释放了.weakSelf只能看着.
    
    3.__strong __typeof在编译的时候,实际是对weakSelf的强引用.
      指针连带关系self的引用计数还会增加.但是你这个是在block里面,生命周期也只在当前block的作用域.
      所以,当这个block结束, strongSelf随之也就被释放了.同时也不会影响block外部的self的生命周期.
    
    

    PS : 这里的weakSelf 和 strongSelf 配合使用是防止block中使用对象,对象出现空导致接下来的代码出现问题的情况.

    在研究AFN或者其他比较火的第三方框架也会常见到这种用法

    weakSelf和strongSelf.png

    参考博文:
    透彻理解block中weakSelf和strongSelf

    到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf

    相关文章

      网友评论

        本文标题:iOS-weakSelf和strongSelf

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