Objective-C,调用方法并等待嵌套线程

时间:2014-06-05 10:35:42

标签: objective-c multithreading

我有一个类(“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传递的对象。

1 个答案:

答案 0 :(得分:1)

如果你可以切换到异步方法(这是更好的IMO,因为你正在与网络和API交互),你应该让你的类使用委托并在执行完成时调用适当的委托方法。

否则,您应该进行execute方法阻止,直到网络和API交互完成为止:这可以通过-[NSURLConnection sendSynchronousRequest:returningResponse:error:]方法实现。