美文网首页
Block中的weakSelf和StrongSelf

Block中的weakSelf和StrongSelf

作者: Mossion | 来源:发表于2016-06-16 17:22 被阅读122次

    在看SVProgressHUD源码时,看到里面的StrongSelf时我是拒绝的:
    // Define blocks
    __weak SVProgressHUD *weakSelf = self;

        __block void (^animationsBlock)(void) = ^{
            __strong SVProgressHUD *strongSelf = weakSelf;
            if(strongSelf) {
                // Shrink HUD to finish pop up animation
                strongSelf.hudView.transform = CGAffineTransformScale(strongSelf.hudView.transform, 1/1.3f, 1/1.3f);
                strongSelf.alpha = 1.0f;
                strongSelf.hudView.alpha = 1.0f;
            }
        };
    

    在官方文档中,苹果是建议用__weakSelf解决循环引用的问题的,但是在下列情况下,weakSelf不一定会得到释放:

    __weak typeof(self) weakSelf = self;
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    __strong __typeof(self) strongSelf = weakSelf;
    [strongSelf doSomething];
    [strongSelf doOtherThing];
    });
    在doSomething中,weakSelf不会变成nil,但是在doSomething执行完后,weakSelf就可能变成nil,这时候就可能引发问题了,而StrongSelf则能完美解决。StrongSelf确保在Block中,StrongSelf不会被释放。

    相关文章

      网友评论

          本文标题:Block中的weakSelf和StrongSelf

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