iphone – 处理块,完成处理程序,dispatch_async和dispatch_sync
发布时间:2020-12-14 17:38:46 所属栏目:百科 来源:网络整理
导读:我正在线程中执行数据的在线提取,我想在块执行后立即执行某些操作. 这是我的代码: - (IBAction)refresh:(UIBarButtonItem *)sender { NSLog(@"checking"); [self editToolbar]; dispatch_queue_t fetchQ = dispatch_queue_create("Refreshing",NULL); dispa
我正在线程中执行数据的在线提取,我想在块执行后立即执行某些操作.
这是我的代码: - (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立即返回,并且即使在块执行完毕之前,“完成检查”也会立即打印.我该如何解决这个问题? 解决方法
我认为这是一个架构问题.任务类似于:
>编辑工具栏 如果这些必须完全按顺序完成,那么我不太了解块或队列的使用;只需在彼此之后运行语句就可以了. 否则,替代方案#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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |