2

将 myViewController 推送到导航堆栈后,我对填充 myViewController 上的一些字段的一些数据进行了简单的网络请求。我不希望这个请求阻塞主线程,所以我使用performSelectorInBackground. 当请求返回时,我使用performSelectorOnMainThread更新 UI。

除了放弃请求外,这种方法效果很好。假设用户推送视图控制器,网络请求开始,然后用户立即弹出视图控制器并在应用程序中执行其他操作。在这种情况下,网络请求返回到一个不存在的对象。我该如何处理这种情况?

我考虑了一个更健壮的网络层,其中每个请求都有一个代表来处理响应。使用这种架构,我可以在弹出视图控制器时取消委托,从而避免请求返回无的问题。我不确定这是否是最好的方法。

4

1 回答 1

1

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

所以你正在发出一个同步请求——一个会阻塞它正在运行的线程的请求。与其这样做,不如使用例如+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]. 然后你可以从你喜欢的任何线程发出请求,包括主线程——不需要-performSelectorInBackground:. 当连接改变状态时,您的委托将使用 NSURLConnectionDelegate 协议得到通知。这样,您可以向-cancel连接发送消息以停止它。

于 2012-11-29T15:16:34.613 回答