我正处于这种情况。。。我想修补100个不同的web请求,但它分为三个不同的功能:
-(void)functionMain {
for(int i = 0; i < 100; i++)
[self sendRequestToServer];
}
所以第一个函数基本上会将请求发送到某个URL并等待它完成。。。
-(void)sendRequestToServer {
[request sendRequest:mAddress];
[request didFinishSelector:@"refreshAddress"];
[request startAsynchronous];
}
上面的函数将执行地址的实际发送。
-(void)refreshAddress {
NSString *result = [request getResponse];
mAddress = [result getTheNextAddress];
[self refreshDisplay];
}
现在这将把mAddress设置为下一个网址。所以我得到了很多,很明显一个请求需要一点时间(大约600毫秒),但是如果你注意到在主循环中
functionMain
,我没有任何机制来查看
refreshAddress
已经完成了它的工作,因为它还没有完成,我只会一遍又一遍地用相同的地址发送请求。
我试着用一个布尔变量来保护循环,但它看起来不起作用。。。有什么优雅的方法可以做到这一点吗?我不知道该找什么。。我不知道
NSOperation
或
NSThread
会帮助我的。
编辑:正如我在评论中提到的,这可能更像是我在这里有一个多线程的情况(确切地说,这可能是100个线程),我只想把它变成一个线程。
编辑:所以我真正想要的是这样(假设循环只有3个):
functionMain(i = 0) ->
sendRequestToServer
然后我们等到结束,然后我们有这个:
refreshAddress (mAddress has been set to something else now) ->
functionMain (i = 1) ->
sendRequestToServer
再一次:
refreshAddress (mAddress has been set to something else now) ->
functionMain (i = 2, finished)
很抱歉,如果我不能更清楚地描述这个问题。。。我希望我能写出更好的英语,能把事情描述得更清楚!