0

在我的编码经验中,我第一次在目标 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,但它只等到第一个线程完成。所以如果我想等到所有两个线程都完成我该怎么办?任何人都可以通过示例代码片段提出建议。

4

1 回答 1

1

我的建议是使用this。它来自脉冲工程博客。花一点时间在里面,直到你掌握了这个想法。

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

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

在主线程上。阅读文档中有关它的内容,特别是最后一句话:

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

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

于 2013-01-09T09:42:25.077 回答