2009-10-28 79 views
5

我想在線程完成後調度線程。在iPhone應用程序中的線程後調度線程

可能嗎?怎麼樣?

例如(指定我的需要)

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    // 1. response - schedule myThread 
    // 2. response - schedule a new thread which will be executed after myThread 
    // 3. response - schedule a new thread which will be executed after second thread 
    // ..... 
} 
+2

我敢問,爲什麼這些都需要獨立的線程,如果他們正在執行一組嚴格的串行任務? – 2009-10-28 22:13:29

+0

你有填充的例子代表這種情況下,我現在需要它 – wod 2013-01-16 14:04:37

回答

10

如果使用NSOperations可以使用addDependency:方法指定的操作的依賴。

NSInvocationOperation將可能對你有用,如果你走這條路線。

編輯:我只是重新閱讀這個主題,你是iPhone上的,所以你沒有塊,但作爲參考,如果你有塊,NSBlockOperation甚至更​​好。

請注意,當使用這些方法執行異步操作(並假設其中的代碼使用autorelease)時,您將負責在方法開始運行時實例化一個NSAutoreleasePool,並在退出時釋放/排空它。

+1

塊,因此NSBlockOperation在iPhone(尚未)上不可用。 (另外,您的鏈接指向Mac OS X文檔;因爲這是一個iPhone問題,所以iPhone OS文檔將更加合適。) – oefe 2009-10-28 20:09:34

+0

已編輯以更新鏈接 – nall 2009-10-28 20:14:46

+0

**更新:**從iOS 4.0開始,我們現在有塊。 – memmons 2011-09-16 01:27:10

2

(1)您可以輪詢線程isFinished屬性。 (2)您可以註冊您的調度/控制對象以接收線索NSThreadWillExitNotification通知。爲了更精確的控制,您可以繼承NSThread並在線程停止之前發送通知作爲最後一個操作。然後在您的控制對象通知處理程序中,您可以輪詢isFinished以確保在啓動下一個線程之前完成它。

參見Thread Programming GuideNSThread Class Guide