2011-04-12 54 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