iphone – 处理块,完成处理程序,dispatch_async和dispatch_sync

iphone – 处理块,完成处理程序,dispatch_async和dispatch_sync,第1张

概述我正在线程中执行数据的在线提取,我想在块执行后立即执行某些 *** 作. 这是我的代码: - (IBAction)refresh:(UIBarButtonItem *)sender { NSLog(@"checking"); [self editToolbar]; dispatch_queue_t fetchQ = dispatch_queue_create("Refreshing 我正在线程中执行数据的在线提取,我想在块执行后立即执行某些 *** 作.

这是我的代码:

- (IBAction)refresh:(UIbarbuttonItem *)sender {    NSLog(@"checking");    [self editToolbar];    dispatch_queue_t fetchQ = dispatch_queue_create("Refreshing",NulL);    dispatch_async(fetchQ,^{        [self setupFetchedResultsController];        [self fetchImonggoItemsDataIntodocument: self.itemDatabase];    });    dispatch_release(fetchQ);     NSLog(@"done checking");    //do something here}

事情是dispatch_async立即返回,并且即使在块执行完毕之前,“完成检查”也会立即打印.我该如何解决这个问题?

解决方法 我认为这是一个架构问题.任务类似于:

>编辑工具栏
> fetchImonggoItemsDataIntodocument
>做点别的事

如果这些必须完全按顺序完成,那么我不太了解块或队列的使用;只需在彼此之后运行语句就可以了.

否则,替代方案#1将使用dispatch_sync而不是dispatch_async.同样,我不太确定使用队列的好处是什么,但它确实如此.

备选方案#2将使用来自块的回调.就像是:

- (IBAction)refresh:(UIbarbuttonItem *)sender {    NSLog(@"checking");    [self editToolbar];    dispatch_queue_t fetchQ = dispatch_queue_create("Refreshing",^{        [self setupFetchedResultsController];        [self fetchImonggoItemsDataIntodocument: self.itemDatabase];        [self doneChecking]; // <-- NOTE! call the callback    });    dispatch_release(fetchQ); }// NOTE! refresh: has been split up into two methods- (voID)doneChecking:    NSLog(@"done checking");    //do something here}
总结

以上是内存溢出为你收集整理的iphone – 处理块,完成处理程序,dispatch_async和dispatch_sync全部内容,希望文章能够帮你解决iphone – 处理块,完成处理程序,dispatch_async和dispatch_sync所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1011191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存