我对iPhone开发很新。我需要一些关于如何同步回调方法和for循环的帮助。
例如: 我有一个for循环说1到3。
在此循环中,首先我向接收者发送消息。接收器的结果是在回调函数中获得的。有了这个结果,我需要执行一些解析。现在我怎么能继续循环?
BR, Suppi
使用代码编辑:
-(void)requestData{
for (int i=1; i<3; i++) {
completeMessage = [self generateMessage:message];
[self sendMessageToReceiver:completeMessage];
//now it goes to the callback function to read message from receiver. How do i return to this point?? to continue the loop.
[self dosomething:result];
}
}
答案 0 :(得分:1)
我对iPhone的开发知之甚少,但基于我的异步函数调用经验,你可能不得不重新考虑你的方法 - 假设这是一个异步函数调用。
当你第一次经历循环时,你的代码将调用所有异步函数并继续。它不会等待。如果您希望它等待每个函数调用,那么您不应该使用异步函数或在循环中使用thread.wait或thread.sleep函数。您还可以在循环中使用某种线程同步和信令。例如,您可以进行异步调用,然后您的线程将等待,直到它从您的回调中获得信号继续。
您可能希望将自定义结束处理从循环中取出,并在完成所有回调后执行此操作。您可以将状态放在每个回调的公共位置,并在回调完成后使用它。
当然,您需要等到所有回调完成后再继续。
希望这会有所帮助。
答案 1 :(得分:0)
在单独的帖子中启动消息:
[receiver performSelectorInBackground:@selector(doSomething)];
使用performSelectorInBackground:withObject:如果你想传递一个参数。
答案 2 :(得分:0)
将“for”循环转换为等效的goto语句。然后将goto基本块分解为方法和方法调用,而不使用goto。然后将包含wait的方法分解为2个方法,并在它们之间使用异步调用和回调。您可能必须在实例变量中保存一些local和for循环的隐式状态。
Goto并不总是坏事。它们只是隐含在更易读的结构化和/或OOP消息传递结构中。有时编译器无法为您进行转换,因此您需要了解原始程序控制排序,以便自己完成。