gpt4 book ai didi

ios - 如果操作未完成,iPhone 应用程序会因 dispatch_async 而崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:06:27 25 4
gpt4 key购买 nike

在我发布的 iPhone 应用程序中,我使用了 dispatch_async block ,没有出现任何问题。该应用检查网站的价格更新,解析 HTML,相应地更新核心数据模型,然后刷新正在查看的表格。

但是,在我最新的应用程序中,我发现我可以通过在价格更新过程运行时切换出应用程序来使应用程序崩溃。第一次和第二次使用之间的区别在我看来只是我从表的 refreshController 调用调度 block (即 tableViewController 现在是内置的下拉刷新机制),现在是 iOS7。

任何人都可以向我建议如何在已知条件下优雅地中止 dispatch_async ,例如用户希望停止进程,或者如果他们像这样切换应用程序并且我想拦截那个正确管理区 block 的事件,好吗?

如果有关于 block 的注意事项的任何好的背景阅读,我很乐意同样浏览此类链接 - 谢谢!

为了您的方便,这是我正在使用的(主要是样板)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];
})
});

最佳答案

该样板代码看起来毫无用处。

您创建一个串行队列。您在队列上分派(dispatch)一个 block ,它只在主队列上分派(dispatch)一个 block 。您还不如直接在主队列上调度。

关于ios - 如果操作未完成,iPhone 应用程序会因 dispatch_async 而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21875876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com