gpt4 book ai didi

download - 在 URLSession Background-DownloadTask 期间重新进入 Detail-VC 后 UI 卡住

转载 作者:行者123 更新时间:2023-12-04 03:01:10 25 4
gpt4 key购买 nike

使用 Swift-4.0.3、iOS-11.2、Xcode-9.2、iPhone-6S(或 Simulator-10.0)

大约一个星期以来,我试图找出以下问题的原因:每当您重新输入涉及 URLSession-Background-DownloadTask 的 ViewController 时,UI 就会卡住。通过重新进入,我的意思是:从 VC 转到 Detail-VC,然后返回 VC...然后再次从 VC 重新进入 Detail-VC。

请在 github 上找到我的示例项目:https://github.com/korners/Test00008

示例项目使用 MZDownloadManager from mzeeshanid .我也尝试了其他框架 - 同样的问题。 MZDownloadManager 是我发现的一个非常好的实现。

回到问题:现在 - 至于 Detail-VC 的第一个条目:一切运行顺利,因为它应该(没有问题)。即使是关闭的应用程序也会顺利地启动到已经运行的后台下载任务(没有问题 - 即进度条和 UI 标签更新得很好)。

但是如果用户按下 Detail-VC 上的后退按钮(NavigationController 的顶部栏)——从这一刻起,Detail-VC 只能在卡住的默认状态下看到!(不再有 UI 更新或进度条移动)。

我非常感谢对此的任何帮助!

附言顺便说一下,造成问题的不是 Segue 本身。我还尝试从 Storyboard 中实例化 VC - 同样的事情:RE-ENTERING 卡住了 UI :/

最佳答案

是的,我认为你没看错。

在我的例子中,我有一个基于列表的 VC(我们称之为父 VC)和详细 VC。 Detail VC 将创建一个后台 session 并将自己设置为它的委托(delegate)。我还注意到,如果我退出并重新输入 detail VC,就会出现问题。我得出了同样的结论, session 正在更新第一个详细信息 VC,我以为它已经消失了,当我从它导航回来时被杀死了。

你看,第一个细节 VC 将 session 创建为一个属性,因此它有一个指向 session 的指针。它将自己设置为 session 的委托(delegate),因此现在 session 有一个指向它的指针。这称为循环,是内存泄漏的原因。这就是为什么第一个细节 VC 没有被杀死的原因—— session 仍然指向它。通常这可以通过在一个方向上使用弱引用来解决,但正如您已经发现的那样,这里还有另一个问题:您不能四处走动并创建多个具有相同标识符的后台 session 。您需要创建一个并将其作为单例保留。

关于download - 在 URLSession Background-DownloadTask 期间重新进入 Detail-VC 后 UI 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49132845/

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