我第一次使用Objective-C块和操作队列.我正在加载一些远程数据,而主UI显示一个微调器.我正在使用完成块来告诉表格重新载入其数据.作为
documentation mentions,完成块不会在主线程上运行,所以表重新加载数据,但是不会重新绘制视图,直到在主线程上执行某些操作,如拖动表.
我现在使用的解决方案是一个调度队列,这是从完成块刷新UI的“最佳”方式吗?
// define our block that will execute when the task is finished void (^jobFinished)(void) = ^{ // We need the view to be reloaded by the main thread dispatch_async(dispatch_get_main_queue(),^{ [self.tableView reloadData]; }); }; // create the async job NSBlockOperation *job = [NSBlockOperation blockOperationWithBlock:getTasks]; [job setCompletionBlock:jobFinished]; // put it in the queue for execution [_jobQueue addOperation:job];
更新
Per @ gcamp的建议,完成块现在使用主操作队列而不是GCD:
// define our block that will execute when the task is finished void (^jobFinished)(void) = ^{ // We need the view to be reloaded by the main thread [[NSOperationQueue mainQueue] addOperationWithBlock:^{ [self.tableView reloadData]; }]; };
解决方法
就是这样您也可以使用[NSOperationQueue mainQueue],如果要对完成块使用操作队列而不是GCD.