Objective-C: 在方法内部定义的块是强块还是弱块?

Objective-C: Are blocks defined inside of methods strong or weak?

我遇到这样的情况:

- (void)someMethod
{
    __weak typeof(self) weakSelf = self;

    void (^myBlock1)(void) = ^{
        // ... do stuff
    };

    void (^myBlock2)(void) = ^{
        [weakSelf doSomeHeavyNetworkCall2:^{
            myBlock1();
        }];
    };

    [self doSomeHeavyNetworkCall1:^{
        myBlock2();
    }];
}

本例中myBlock1和myBlock2的生命周期是多少?我应该像这样检查 nil 吗?

void (^myBlock2)(void) = ^{
    [weakSelf doSomeHeavyNetworkCall2:^{
        if (myBlock1) {
            myBlock1();
        }
    }];
};

[self doSomeHeavyNetworkCall1:^{
    if (myBlock2) {
        myBlock2();
    }
}];

此外,如果我将整个 someMethod 包裹在 @synchronized 中,我能保证周围有方块吗?

局部变量在 Objective-C 中默认是强的,所以 myBlock1myBlock2 是强的。不需要 if (myBlock1)if (myBlock2) 检查。

@synchronized 包装 someMethod 的内容对这些变量的生命周期没有影响。