block中的weak&strong self

作者: Shawn_Wang | 来源:发表于2015-12-24 11:02 被阅读258次

    在block中使用self的时候,需要在外部将self弱化,从而不让block持有self,避免循环引用。循环引用的原因是因为self是持有block的,如果又让block持有了self,那么就会造成循环引用。而进入block后,如果用到self,则需要将self强化,是为了避免self在block执行过程中释放。block执行玩strongSelf后会自动释放。
    代码如下

    __weak __typeof(self)weakSelf = self;
    self.xxblock = ^{
      __strong __typeof(weakSelf)strongSelf = weakSelf;
    ...
    }
    

    这里面用到了typeof(self),表示表明类型。如果self是UIViewController 那么--weak __typeof(self)weakSelf = self;等价于__weak UIViewController *weakSelf = self;

    相关文章

      网友评论

        本文标题:block中的weak&strong self

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