如何阻止失控进程

时间:2011-05-02 21:02:37

标签: iphone multithreading ios race-condition

所以我正在开发这个请求和检索iPhone的webservice内容的应用程序。我遇到的问题是这样的:当我最初请求数据时,它作为一个独立的线程产生,因此应用程序不会因为网络速度慢而无法响应。这意味着如果用户在此数据完成下载之前导航离开当前页面,则可能发生意外情况。

我已经设法将问题案例缩小到一个相对简单的问题:我有一些嵌套表,所以如果用户进入“Messages”表,有时需要一段时间才能下载,然后退出立即,并选择一组不同的消息进行查看,上一组消息最终加载,因为它仍然在队列中。

以下是我尝试过的事情:

1)我尝试取消操作,但这是徒劳的,因为我当时只允许队列中的一个操作,它会立即触发

2)我尝试验证数据的接收者是否相同,但这不起作用,因为实际的表对象是两个选择之间,它只需要一个不同的数据集。

任何人都有关于如何解决这个棘手的线程问题的一般编程建议?

在iPhone特定说明中:如果我可以阻止用户退出消息表,我就不会遇到这个问题,因为在数据加载完成之前,它们基本上会被锁定在该视图中

谢谢!

1 个答案:

答案 0 :(得分:1)

This post有一些与iOS网络和线程相关的设计建议。它的基本要点是“不要使用显式线程”,我不能同意。 NSURLConnection具有很强的内置功能,可以在为您管理所有线程的同时从URL异步加载数据。它们也可以随意取消。

如果您要使用NSURLConnection范例,则只需在退出请求视图控制器时取消任何待处理请求。