【发布时间】:2016-03-24 17:57:53
【问题描述】:
我有这样的情况:
- (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 中,我能保证周围有块吗?
【问题讨论】:
-
将
someMethod重新包装在@synchronized中,注意如果这些块异步运行,它们将不会被同步。@synchronized指令仅影响同步运行的指令。如果您的意图是同步回调,则必须将@synchronized指令放在 inside 块中,而不是包装someMethod。
标签: ios objective-c concurrency block