gpt4 book ai didi

ios - 在导航 Controller 中转到 "back"时,ARC 未释放内存 - 它正在减慢我的 uipageviewcontroller

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:11:38 24 4
gpt4 key购买 nike

我正在开发的应用程序的一部分涉及 UIPageViewController,其中每个页面都显示一个存储在核心数据中的“条目”。条目包括一些图像,这些图像被压缩并存储为 NSData。因此,为了加载这些图像并将它们显示在页面上,我使用了 imageWithData,即

photo.image = [UIImage imageWithData:entry.photo];

问题是 imageWithData 不是特别快,因此翻阅页面的响应速度不如我希望的那样。解决这种情况的最佳尝试是将一些由我的 UIPageViewController 显示的 View Controller 预加载到一个数组中。 (不确定这是否是最好的做法,但你知道了)

所以,澄清一下,我有一个导航 Controller ,它包含 viewControllerA,然后链接到 viewControllerB - 它显示 UIPageView 和 entryController(每个页面上有一个 entryController)。问题是,当我使用导航栏从 viewControllerB 返回到 viewControllerA 时,我希望从内存中释放 viewControllerB 的 entryController 数组。但是,ARC 似乎并没有这样做。因此,在 viewControllerA 和 viewControllerB 之间来回几次,每次翻几页后,我开始收到内存警告 - 这最终清除了当前的 entryControllers 数组,并且违背了拥有该数组的目的,因为每次收到内存警告时都必须重新加载条目。

简而言之,当我通过导航 Controller 返回 viewControllerA 时,ARC 不会清除我为 viewControllerB 分配的任何内存。我不喜欢那样。如果有人可以提出发生这种情况的原因,或者让我知道我是否以错误的方式处理这整件事,我们将不胜感激。我只是想加快从一页到下一页的过渡!

非常感谢。

最佳答案

ARC 不释放你的内存的唯一原因是你仍然把它保留在某个地方。只有你知道那是哪里。

通常,这是由保留循环引起的,这在 block 中很容易发生。

但是,您很可能在 Controller 、iVar 或某个集合中的某个地方保留指向对象的指针。

您是否对您的代码运行了静态分析器?它非常擅长找到其中的一些东西。

仪器告诉您什么?它有一些用于查找泄漏和保留周期的简洁工具。

编辑

您可以根据需要拥有对任何对象的尽可能多的引用。一旦计数归零,它将被释放。

问题是您将一个强指针数组作为缓存保存在 View Controller 中。如果你想释放它们,你必须手动将这些指针置零。您以某种方式将 Controller 预加载到数组中。在您卸载它们之前,它们会一直存活。

所以,只要你有一个指向某物的强指针,它就会一直存在。

关于ios - 在导航 Controller 中转到 "back"时,ARC 未释放内存 - 它正在减慢我的 uipageviewcontroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805543/

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