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

时间:2016-03-24 17:57:54

标签: ios objective-c concurrency block

我有这样的情况:

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

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

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

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

在这种情况下,myBlock1和myBlock2的生命周期是多少?我应该这样检查零吗?

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

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

另外,如果我将整个someMethod包裹在@synchronized中,我保证会有块吗?

1 个答案:

答案 0 :(得分:2)

默认情况下,Objective-C中的局部变量很强,因此myBlock1myBlock2很强。无需进行if (myBlock1)if (myBlock2)检查。

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