2012-11-29 35 views
2

将myViewController推入导航堆栈之后,我为myViewController上的几个字段填充一些数据发出简单的网络请求。我不希望这个请求阻止主线程,所以我使用performSelectorInBackground。当请求返回时,我使用performSelectorOnMainThread来更新UI。放弃iOS应用程序中的网络请求

此方法正常工作,但放弃请求。假设用户按下视图控制器,网络请求开始,然后用户立即弹出视图控制器并在应用程序中执行其他操作。在这种情况下,网络请求会回到不存在的对象。 我该如何处理这种情况?

我已经考虑过一个更强大的网络层,其中每个请求都有一个委托处理响应。使用这种体系结构时,我可以在视图控制器弹出时清空委托,从而避免请求返回任何问题。我不确定这是否是最好的方法。

回答

1

我不希望这个请求阻塞主线程,所以我使用 performSelectorInBackground。

所以你正在做一个同步请求 - 一个会阻止它运行的线程。而不是这样做,请使用例如+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]进行异步请求。然后,您可以根据自己喜欢的任何线索(包括主线程)发出请求 - 不需要-performSelectorInBackground:。当连接更改状态时,将使用NSURLConnectionDelegate协议通知您的委托。这样,您可以发送-cancel消息到连接来停止它。

相关问题