设置GCD操作的超时

时间:2014-01-02 16:25:25

标签: ios objective-c grand-central-dispatch

我有一个应用程序,允许用户通过Web服务获取流量计信息。在农村地区,网络连接可能很慢或根本不存在。我想在fetch操作上设置超时但我不确定如何去做。这是获取操作:

[self.view addSubview:hud];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    stateGauges = [[GaugeList alloc] initWithStateIdentifier:stateIdentifier andType:nil];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
        [hud removeFromSuperview];
    });
});

如果我希望此操作超时(10秒),导致活动指示消失并使应用恢复正常运行,我该怎么办呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

阻止无法取消,他们需要自行检查

坏与坏艰难的方式(DYI)

你需要一个单独的队列,它只有一个超时块​​结束,在超时时你将BOOL设置为isCancel。在另一个块中,您可以检查

GOOD&简单方法

使用NSOperationQueue& NSOperation API - :)

在那里,NSOperationQueue也不会自动杀死长时间运行的操作,但是一般的基础设施到位并且更容易完成

e.g。该操作可以自行完成...请参阅AFNetworkingOperations了解其中一种方法