2011-04-12 76 views
1

我有一个复杂的同步作业,它通过HTTP执行多个针对内容的异步调用。每次收到此内容时,都会要求下一位等等。这些都与服务器上的数据在一个大型的全面同步作业中进行了严格的链接。iphone/objective-c dev中有多少线程太多

此工作链中可能有12个步骤。它似乎在第5个异步请求之后卡住,请求永远不会回来,并且它永远等待它。我认为这可能与产生的线程太多有关,因为如果我在开始时将它挂起,它会返回正常。

以我想象中的方式,主线程要求异步内容a。当它回到它自己的异步时间时,它会产生一个新的线程,然后请求异步内容b。当它回到它自己的甜蜜时间时,它会产生一个新线程,然后请求内容c。每次异步请求返回结果时是不是创建一个新线程?

我是否将这些请求串联起来?我很擅长Java开发的线程,但我对他们在Obj-C中的工作方式感到困惑。我是否需要使用说3线程的线程池并重用这些?

对不起,这个高层次的问题,但我相信一些专家可以帮助清除这个神秘的云。

+0

我认为你会使用NSOperationQueue的更好。只需将您的操作添加到该队列中,它将按顺序处理它们。这应该保持线程的数量。 – rckoenes 2011-04-12 11:34:36

+0

嗯好的。所以当它异步返回结果时,我会通过将其添加到队列中来“启动”下一个工作,并且它会自动被触发? – 2011-04-12 11:52:58

+0

只要操作ID完成,它就会从队列中获取操作。你可以在这里找到一个很好的教程:http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/ – rckoenes 2011-04-12 11:55:16

回答

2

NSOperationQueues建立在Grand Central Dispatch之上。如果您需要精确控制操作顺序和分派同步请求的功能,则可能需要直接使用GCD。使用任何一种,你都不需要担心线程创建/管理。您只需根据应用程序的需要排列您的操作即可。

苹果公司的文件在这恕我直言,但你可以找到一些教程。

[编辑:添加链接到苹果的文档]

http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html