ios - 为 GCD 操作设置超时

标签 ios objective-c grand-central-dispatch

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

[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/

相关文章:

ios - SWRevealViewController 无法从 appdelegate.m 调用

cocoa-touch - 在后台实现一个 block ,然后在完成后在主线程上运行另一个 block ?

objective-c - 打开多个文件的大中央策略

ios - 应用程序 :didFinishLaunchesWithOptions: 中的长时间运行任务

ios - NSDate 格式没有显示预期的内容

ios - 动态原型(prototype)表中需要一些静态单元格

ios - 将 NSDictionary 转换为 NSMutableArray

ios - 是否可以在 CAKeyFrameAnimation 之后更新按钮的位置?

iphone - 我应该使用 self.tableView 还是单独使用 tableView?

ios - 滚动时 TableView 行会变得困惑