在完成块中设置BOOL标志时是否需要使用__block?

Bra*_*mas 1 block objective-c objective-c-blocks

我正在使用以下代码:

 [_presenter presentViewController:_alert animated:YES completion:^{
               _isShowingAlert = YES;
            }];
Run Code Online (Sandbox Code Playgroud)

我是否需要为此标志使用__block限定符?我试了没有它似乎工作(设置BOOL所以更改在块外可见)我不清楚为什么它的工作原理.

BOOL在.m的顶部声明:

@implementation NotificationTracking {
    BOOL _isShowingAlert;
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 5

__block更新局部变量时需要限定符.如果要更新类属性(或者,在您的情况下是实例变量),__block则不需要限定符.

使用异步块,更新局部变量通常没有意义,因此您不会经常在此上下文中看到它.