2012-12-17 133 views
-1

因爲處理器繁重的工作需要放在非UI線程上,所以我們將其視爲後臺線程。現在在我的情況下,我解析來自feed的數據,然後將這些解析的數據插入到DataBase中。我想在我的後臺線程上處理這個「數據解析」,將UI線程響應保留給用戶交互。現在我的想法是在應用程序啓動後立即開始解析。如何在後臺執行任務?

我完全不知道如何處理IOS中的線程。

請有人幫助我。

+3

'我完全不知道如何處理IOS中的線程.' ...讀書! – Raptor

回答

0

如果您搜索到多一點,你會發現什麼......這一個是免費的:

// Declare the queue 
     dispatch_queue_t workingQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
     dispatch_async(workingQueue, 
         ^{ 
          // My background job 
          dispatch_async(dispatch_get_main_queue(), 
              ^{ 
               // Update the UI 
              } 
              ); 
         }); 
2

羅漢,如果你希望從服務器下載數據,數據插入的您的設備上的本地數據庫和訂單很重要,那麼我建議您研究異步請求,例如使用ASIHttpRequestAFNetworking庫。

這比使用多線程編程更好。

我不是大師,但從我自己的經驗來看,我發現多線程編程更適合在後臺進行計算,而不是在後臺下載數據。異步請求更多用於在後臺下載數據。

必須使用合適的工具來完成正確的工作。

希望有所幫助。

0

恕我直言,最簡單的方法就是用這種NSObject中的方法:

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg; 

這應該調用,將在後臺運行,解析數據的方法。
當您完成您可能需要通知主thread.So你可以在主線程中執行完成處理程序:

NSBlockOperation* completionHandler=[NSBlockOperation blockOperationWithBlock:^
{ 
    // Use the parsed data 
}]; 
NSOperationQueue* queue=[NSOperationQueue mainQueue]; 
[queue addOperation: completionHandler]; 

PS:這應該在後臺方法使用一次,它已經完成解析數據。 我認爲你需要更新一些可能與主線程產生競爭條件的東西。