在我的iPhone应用程序中,我使用了dispatch_async
块没有问题。该应用程序检查价格更新网站,解析HTML
,相应地更新核心数据模型,然后刷新正在查看的表。iPhone应用程序与dispatch_async崩溃如果操作未完成
但是,在我最新的应用程序中,我发现我可以通过在价格更新过程运行时切换出应用程序来使应用程序崩溃。第一次和第二次使用之间的差异似乎只是我从表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];
})
});
只知道,是可以安全使用的'self',而不是'的UIViewController __weak weakSelf = self'在'dispatch_async'? –
是的,在异步块中使用self是安全的..但是你不能在后台线程块中更新UI。 –
好的谢谢。很高兴知道 –