在哪个线程上调用iOS块?

Haa*_*nti 12 objective-c ios

我正在学习斯坦福大学视频中的块.我现在处于解释核心数据的部分.老师们提到了一些事情:

- (void)openWithCompletionHandler:(void (^)(BOOL success))completionHandler;
Run Code Online (Sandbox Code Playgroud)

他说,将在调用方法的线程中调用completionhandler块.所以基本上该方法运行async但是在线程上调用块,让我们假设main.

所以我的问题是在进行方法调用的线程上运行所有块.为了说明为什么我问这个问题,我有一个Async类,它向服务器请求.

所有这些方法的格式如下:

- (void) getSomething:(id <delegateWhatever> const)delegate{
   goto background thread using GCD..
   Got result from server...
   Go back to main thread and call the delegate method...
}
Run Code Online (Sandbox Code Playgroud)

当我使用块时,我不需要担心回到主线程,如果它们将在调用的地方被调用?

希望这很清楚,

提前致谢

小智 15

如果某些内容异步运行,您应该阅读文档以了解哪个线程,例如将执行完成块.如果是你的代码,你在这里负责,你可以使用全局GCD队列,你可以创建自己的队列并在那里执行它或任何...

通常,块的行为类似于函数或方法调用,它在线程上执行,调用它.甚至可能同时从2个不同的线程执行相同的块.

而且要明确:即使你正在使用块,你需要关心回到主线程,当然如果有必要的话

  • +1"n通用,块的行为类似于函数或方法调用,它在线程上执行,调用它." (4认同)