gpt4 book ai didi

ios - 在切换 View Controller 时,我应该显式处理中断的异步进程吗?

转载 作者:行者123 更新时间:2023-12-01 19:09:40 25 4
gpt4 key购买 nike

我似乎对这个问题的措辞不够好,无法获得富有成效的搜索结果。

如果我在等待网络连接完成时更改了最前面的 View Controller ,我应该围绕网络请求构建错误处理吗?或者我可以期待回调 block 向 nil 发送消息吗?什么都没有发生?还是有一些预处理器的魔法可以礼貌地停止这个过程?

对于不在主线程上的所有进程,上述答案是否相同?

最佳答案

如果异步请求的委托(delegate)是 View Controller 并且该 View Controller 变为非事件状态,您应该取消请求。

如果您不取消请求,您可能会尝试做与用户不再相关的事情。我们曾经遇到过这个问题,用户看到不相关的弹出警报。

如果您使用 NSURLConnection ,只需调用cancel方法。您通常必须为 NSURLConnection 保留一个强指针。对象,以便您可以执行此操作。

取消请求的好地方是 prepareForSegue就在切换到另一个 View 之前。

使用导航 Controller (push segue)或模态segue, View Controller 保留在堆栈上,因此不会被释放。您的委托(delegate)方法仍将被调用。即使在其他情况下,您也可能会遇到竞争条件,因此请务必取消。

您还应该考虑在 View Controller 的 viewWilLDisappear 中取消请求。方法。如果用户在请求收到响应之前单击主页按钮,然后返回到应用程序,则请求很可能会出错(超时)。如果您在连接错误时没有做任何事情,那很好,但如果您显示错误,则用户不会期望在重新启动应用程序后立即看到错误。

假设 MVC 范式,对于与特定 View 相关的所有进程,答案几乎相同。

在某些情况下,异步请求的委托(delegate)可能是一个单独的类(不是 View Controller )的实例,而不是取消,您将始终处理响应,即使在同一个线程中(主运行循环)。当我“在后台”更新内容时,我会这样做。

关于ios - 在切换 View Controller 时,我应该显式处理中断的异步进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17226585/

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