只是想弄清楚什么是设计这种功能的最佳方式?基本上我发送一个异步的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