2010-12-02 35 views
4

我想知道c/cocoa中的块是否在单独的线程上运行到主线程。它们对于执行计算代价很高的代码有用吗,而让UI响应?块和线程

+0

那么,关于C还是Objective-C呢? – 2010-12-02 12:09:34

+0

我认为这取决于你如何调用该块... – 2010-12-02 12:12:43

+0

@Let_Me_Be有趣的问题......从技术上讲,它们是在C级实现的,但我只见过它们用于Objective-C。 – 2010-12-02 12:15:51

回答

13

块只是代码捆绑到一个可调用对象中的片段。他们如何运行完全取决于调用它的代码。

在单独的线程上运行块不仅是可能的,而且正是块概念引入的原因。它支持Grand Central Dispatch,它在面向任务的模型背后隐藏了许多并发编程的复杂性。

1

他们不必在另一个线程上运行,但他们可以。您可以将它们安排在NSOperationQueues或GCD队列中,这些队列可以通过后台线程进行排序。

是的,这可以是一个有用的构造,以帮助您从主线程中获得耗时的工作。但这不是所有块都有用的,相反,您可以使用或不使用块进行后台处理。

1

您可以使用GCD安排在其他线程上发布的块。这两个是一起介绍的,所以任何关于这个的讨论通常都会提到另一个。然而,块本身并不是一个多线程机制。