在我发货的 iPhone 应用程序中,我使用了一个dispatch_async
没有问题的块。该应用程序检查网站的价格更新,解析HTML
,相应地更新核心数据模型,然后刷新正在查看的表格。
然而,在我最新的应用程序中,我发现在价格更新过程正在运行时,我可以通过退出应用程序来使应用程序崩溃。在我看来,第一次和第二次用法之间的区别只是我从表中调用调度块refreshController
(即tableViewController
现在内置的拉动刷新机制)并且现在是 iOS7。
任何人都可以向我建议dispatch_async
在已知条件下应该如何优雅地中止,例如用户希望停止进程,或者如果他们切换这样的应用程序并且我想拦截该活动以正确管理块,好吗?
如果有关于块的注意事项和注意事项的任何好的背景阅读,我很乐意同样浏览这些链接 - 谢谢!
为方便起见,这是我正在使用的(主要是样板文件)dispatch_async 代码:
priceData = [[NSMutableData alloc]init]; // priceData is declared in the header
priceURL = … // the price update URL
NSURL *requestedPriceURL = [[NSURL alloc]initWithString:[@“myPriceURL.com”]];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:requestedPriceURL];
dispatch_queue_t dispatchQueue = dispatch_queue_create("net.fudoshindesign.loot.priceUpdateDispatchQueue", NULL); //ie. my made-up queue name
dispatch_async(dispatchQueue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:urlRequest delegate:self startImmediately:YES];
[conn start];
})
});