我有一个网络操作,在完成后调用一个块:
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
// call this method's completion handler
为了开始我的应用,我想将其与一些UIView
块动画一起运行以启动应用。在应用程序可以继续之前,必须同时看到用户动画并且必须完成网络操作。我希望同时发生这些异步事件,我尝试过这样的事情:
__block BOOL animationsDone=NO, networkDone=NO;
[self doUIViewBlockAnimations:^(BOOL finished) {
animationsDone = YES;
if (networkDone) [self startTheApp];
}];
[self doNetworkThing:^(id result) {
networkDone = YES;
if (animationsDone) [self startTheApp];
}];
这似乎运行正常,我认为它是安全的,因为这些块必须都在主队列上运行,所以我认为它们不能同时运行。但是我对这些东西有点不稳定(例如nonatomic
所做的事情,即使我把它放在每个属性上)。
是否存在这两个块都完成的风险,但BOOL的状态在某种程度上混乱并且应用程序无法启动?这可能是一个难以理解的错误。