我有一个类(“MyClass”),它的公共接口由一个方法和一个int字段组成。
公共方法(“execute”)从应用程序获取一些值,并启动另一个私有方法(“execute:withId:”)将这些值作为参数传递。私有方法做一些准备并在单独的线程中启动网络交互(上传文件,api交互)方法。最后,API返回int值(“Id”),将其放入public int字段。
在另一个类中我有方法应该对此Id执行某些操作,例如
MyClass* c = [Global getMyClassInstance];
[c execute];
int Id = [c getId];
问题是,直到在[c执行]之后创建的所有线程被称为Id,并且我找不到如何等待所有线程完成。
我试过了:
[c performSelectorOnMainThread:@selector(execute) withObject:c waitUntilDone:YES];
但它不等待。我也尝试过dispatch_group,结果相同。并且NSOperationQueue尝试在NSOperationQueue上执行选择器而不是作为withObject传递的对象。
答案 0 :(得分:1)
如果你可以切换到异步方法(这是更好的IMO,因为你正在与网络和API交互),你应该让你的类使用委托并在执行完成时调用适当的委托方法。
否则,您应该进行execute
方法阻止,直到网络和API交互完成为止:这可以通过-[NSURLConnection sendSynchronousRequest:returningResponse:error:]
方法实现。