只是想弄清楚什麼是設計這種功能的最佳方式?基本上我發送一個異步的NSURLConnection,它會發送一個返回一堆數據的服務器。一旦我得到的數據,我必須執行一些工作,它是非常昂貴的,而我寧願做一個bg線程,以防止UI鎖定。最後,我還需要隨着從服務器收到並處理的響應動態地進行可用的更新。如何在更新UITableView時在後臺線程中執行網絡任務?
我的問題是我將如何去做後臺線程中的工作作爲數據到達,以便該表不會等待,直到所有的數據已被加載之前被更新??
這是我到目前爲止的僞碼。在我的ViewController中,我會有兩個BOOL標誌newDataReceived和dataFinishedDownloading。我也有兩個變量,一個包含當前數據的字符串和一個保存處理數據結果的nsarray。然後,
- in didReceiveResponse:我會通過調用performSelectorInBackground:用處理方法作爲選擇器來產生一個新的線程。
- 在這種方法中,我會有一個循環,首先會檢查newDataReceived以查看是否有新數據到達,如果有,請對其執行一些操作。
- 一旦處理完畢,我會接盤的結果的NSArray中,然後調用更新表格數據源,並重新加載使用performSelectorOnMainThread表的另一種方法:
- 最後我想檢查dataFinishedLoading標誌,以查看是否有任何數據處理
- 如果還有數據,並會從頭再來,否則清理線程退出
另外,newDataReceived標誌將在didReceiveData設置:以及接收到的實際數據。最後在didFinishLoading中,我會設置dataFinishedLoading標誌來表示所有數據都已加載。
我打算在檢查狀態標誌以及獲取和設置接收到的數據字符串和結果nsarray時在#2-4中使用NSLock。
我確定有很多方法可以做同樣的事情,但這似乎是一個好方法嗎?
THX
任何人以相同或差異的方式做了類似的事情? – James 2011-02-10 21:40:28