我有一个应用程序,允许用户通过网络服务获取流量计信息。在农村地区,网络连接可能很慢或不存在。我想为获取操作设置超时,但我不确定如何去做。这是获取操作:
[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 秒),导致事件指示器消失并使应用恢复正常运行,我该怎么做?
谢谢!
最佳答案
阻止无法取消,需要自行检查。
糟糕而艰难的方式(DYI)您需要一个单独的队列,该队列只有一个超时 block 结束,在超时时,您将 BOOL 设置为 isCancel。在您检查的另一个 block 中
好又简单的方法
使用 NSOperationQueue 和 NSOperation API -- :)
在那里,NSOperationQueue 也不会自动终止长时间运行的操作,但通用基础设施已经到位并且更容易完成
例如该操作可以自行完成...请参阅 AFNetworkingOperations 了解一种实现方法
关于ios - 为 GCD 操作设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20887180/