随着可可,我如何安排一个操作(代码块)在后台线程上异步运行?如何在后台线程上调度操作[可可]
存在操作长时间阻塞的风险,所以在主线程上执行操作至关重要。
当然,我可以创建自己的线程(NSThread
),但在我看来,可可应该提供一个更简单/更好的方法。
随着可可,我如何安排一个操作(代码块)在后台线程上异步运行?如何在后台线程上调度操作[可可]
存在操作长时间阻塞的风险,所以在主线程上执行操作至关重要。
当然,我可以创建自己的线程(NSThread
),但在我看来,可可应该提供一个更简单/更好的方法。
您可以使用Grand Central Dispatch命令dispatch_async()轻松地在后台运行代码。这方面的一个例子:
dispatch_queue_t bgQueue = dispatch_queue_create("bgQueue", NULL);
dispatch_async(bgQueue, ^{
//your code here
});
据我所见,文档没有说这会在后台线程上运行该块,即在不是主线程的线程上。我错过了什么吗? –
它将发送到您设置为第一个参数的任何队列。您不使用dispatch_get_main_queue()创建的任何队列不是主队列。因此你的块将在后台运行(例如不在主队列中)。 –
@jshier你是说主线程永远不会执行提交给GCD队列的东西,除非该队列是主队列?请注意,这里重要的不是哪个队列运行它,而是哪个线程。 –
有大约5种不同的方式来做到这一点。 –
@HotLicks好。让我知道他们。 –