ike*_*8me 8 multithreading block objective-c grand-central-dispatch sendasynchronousrequest
Objective-C块总是在一个单独的线程中执行吗?
具体来说,我问的是NSURLConnection类的sendAsynchronousRequest:queue:completionHandler方法.这是场景:
主线程(第1个线程)调用sendAsynchronousRequest方法,在第二个线程上执行sendAsynchronousRequest,当方法完成时由NSOperationQueue管理并调用commpletionHandler,它执行哪个线程?第二个线程?又是第三个线程?还是第一个帖子?
谢谢!
小智 8
块只是一个闭包,就像你用python或函数式语言一样.它们不会"运行在线程上",而是在它们被调用的地方运行.
int main(void)
{
void (^f)(void) { printf("hello world!\n"); }
f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是你认为它做什么,没有派遣队列,没有线程,没有任何东西.
但是,一旦你拥有了具有所有良好捕获语义的块,那么使用API来安排它们在各处的执行是非常诱人的.但基本上,一个块,就像一个函数指针和一个包含所有捕获的变量的ad-hoc结构一样,作为参数传递给回调(甚至它在编译器中的实现方式).
它在您指定为queue
参数的任何操作队列上执行它:
加载URL请求的数据,并在请求完成或失败时在操作队列上执行处理程序块.
该queue
参数记录为:
请求完成或失败时将处理程序块分派到的操作队列.
所以它确实取决于NSOperationQueue
使用了多少线程.我希望池行为 - 所以虽然可以有多个线程,但我不希望每个处理程序有不同的线程.
归档时间: |
|
查看次数: |
4430 次 |
最近记录: |