可可触摸 – 这是操作队列完成块的正确用法吗?

前端之家收集整理的这篇文章主要介绍了可可触摸 – 这是操作队列完成块的正确用法吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我第一次使用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.

猜你在找的iOS相关文章