gpt4 book ai didi

objective-c - 在 iOS 应用程序中放弃网络请求

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:56 24 4
gpt4 key购买 nike

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

除了放弃请求外,这种方法工作正常。假设用户按下 View Controller ,网络请求开始,然后用户立即弹出 View Controller 并在应用程序中执行其他操作。在这种情况下,网络请求返回到一个不存在的对象。 我该如何处理这种情况?

我考虑过一个更健壮的网络层,其中每个请求都有一个处理响应的委托(delegate)。使用这种架构,我可以在弹出 View Controller 时将委托(delegate)清空,从而避免请求返回任何内容的问题。我不确定这是否是最好的方法。

最佳答案

I don't want this request to block the main thread so I make it using performSelectorInBackground.

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

关于objective-c - 在 iOS 应用程序中放弃网络请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13628719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com