块会在运行它的线程上执行吗?

时间:2013-11-18 17:26:50

标签: objective-c

如果我有这样的块:

(void) ^contrivedExample = ^{//some expensive operation//};

并像这样使用它:

int test = 1;

contrivedExample()

test++;

由于递增测试不会花费时间,这只会在我的块完全执行后才会发生吗?

3 个答案:

答案 0 :(得分:2)

是的,他们会执行。只有在昂贵的块完成执行后才会发生增量。

如果你需要刷上你的积木,这里有一个很好的解读: https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html

答案 1 :(得分:2)

是。在块完全执行完毕后,将发生递增test。块本身并不是异步的,尽管它们经常被 异步的API使用。

答案 2 :(得分:2)

是。您甚至可以通过调用dispatch_syncdispatch_async来使其在不同的主题上运行。

dispatch_sync表示块在不同的线程上运行,而当前线程等待块完成。

dispatch_async将块发送到另一个线程,当前线程继续。