2012-02-15 40 views
0

我仍然试图让我的脑袋周围使用后台线程来获取数据。当被调用的方法结束时,我不希望我的线程死掉,所以它看起来像后台线程中的异步操作将是错误的方法。但是,如果该提取可以被抢占,那么使用同步提取才有意义,所以主循环可以在等待来自服务器的数据时执行。同步操作(例如,stringFromURL)是否受到其他线程的抢占?

有人可以帮我解决这个问题吗?我想更好地理解它,即使您可能会建议使用网络库来隐藏所有这些复杂因素。

+0

为什么你不希望线程在方法调用结束时死掉? – 2012-02-15 16:30:54

+0

我需要处理操作的结果并进行清理。因此,在异步执行时需要使用完成方法或完成块。如果我同步执行,则可以将完成代码放入内联中。我可以在同步操作中执行此操作,但我试图了解如何在具有明确的单独完成方法时执行此操作。 – Jim 2012-02-15 17:25:00

+0

如果您使用网络调用,您不能只使用NSURLConnection委托方法吗? (如[连接:didReceiveData])如果失败了,我想你可以同时执行两个操作并清理它并使用performSelectorInBackground在单独线程上运行该方法: – MGA 2012-02-15 18:40:00

回答

1
  1. 主线程肯定在其他线程的同步方法中执行,而且它可以在需要最大性能时挂起后台线程的执行方法。同时滚动。
  2. 异步方法更好,因为它们可以更好地控制您的操作。它们可以从主线程或后台线程中调用。
  3. 考虑也使用GCD和操作队列,请参阅Concurrency Programming Guide以供参考。
+0

我开始阅读并发编程指南。它开始变得更清楚一些可能性。我已经看到一些关于GCD和NSOperations的教程,并且我不清楚。在我研究了这个之后,我会重新回答你的答案。 – Jim 2012-02-15 17:31:46

相关问题