使主线程等待,直到所有其他线程在IPhone sdk中完成

时间:2013-01-09 09:34:19

标签: ios objective-c multithreading ios4

在我的编码经验中,我第一次在目标C中处理线程。在我的应用程序中,我需要在两个线程中下载一些资产。下载完成后,我必须启动我的主线程,它将利用线程中下载的资产。所以我写了一些这样的代码

NSThread *threadPlayer1 = [[NSThread alloc]initWithTarget:self selector:@selector(getPlayer1Assets) object:nil];
            
[threadPlayer1 start];
            
NSThread *threadPlayer2 = [[NSThread alloc]initWithTarget:self selector:@selector(getPlayer2Assets) object:nil];
            
[threadPlayer2 start];

[self performSelectorOnMainThread:@selector(introducePlayer1) withObject:nil waitUntilDone:YES];

我将waituntilDone编写为Yes,但它等待直到第一个线程完成。 所以,如果我想等待,直到所有两个线程完成我该怎么办?任何人都可以建议使用示例代码段。

1 个答案:

答案 0 :(得分:1)

我建议使用this。它来自Pulse Engeenering Blog。花一点时间,直到你掌握了这个想法。

至于你的代码。我猜你这样做了:

[self performSelectorOnMainThread:@selector(introducePlayer1) withObject:nil waitUntilDone:YES];

在主线程上。阅读documentation上的内容,特别是最后一句:

  

wait一个布尔值,指定当前线程是否阻塞直到   在主机上的接收器上执行指定的选择器之后   线。指定YES以阻止此线程;否则,指定NO   让这个方法立即返回。

     

如果当前线程也是主线程,则为其指定YES   此参数,消息将立即传递和处理。