gpt4 book ai didi

ios - PopViewController 占用内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:16:40 27 4
gpt4 key购买 nike

我正在使用 ARC。我有 UINavigationController 来推送和弹出。碰巧其中一个 ViewController 是一个巨大的 ScrollView ,可容纳 100MB。在 popViewController 之后,包含 scrollview 的 ViewController 应该被释放。 NSLog 显示调用了 dealloc。但是,100MB内存仍然被占用。正常吗?

如果 viewController 的 dealloc 被调用,是否意味着它的 retainCount 已经为零并且我没有泄漏 viewController?

提前致谢

引用: Memory not released when popViewController CalledAPURV 暗示 iOS 有一个缓存机制来占用内存。真的吗?

编辑:从 Xcode 中的 Debug Navigator 观察到内存使用情况 enter image description here

编辑2:

我只是尝试再次运行完全相同的代码。但是这一次,我打开了 iPhone 的个人热点,并让它不断地下载一些东西。然后我使用相同的代码再次运行该应用程序。我看到这个: enter image description here

中间的尖峰是 100MB 的 ScrollView ,现在如果我 popViewController,它会回到 12MB。这让我觉得 iOS 中确实存在缓存,并且取决于内存可用性。当内存不足时,缓存会被冲走,并且会立即释放。

稍后我也会尝试学习 Instrument 并在此处发布结果。

最佳答案

保存在内存中的不一定是 View Controller 本身,而是它包含的重对象。

您应该查看 Instruments 以了解发生了什么。如果您使用“分配”工具并运行您的应用,您会在侧面看到一个“标记生成”按钮。

enter image description here

如果你在插入和弹出 View Controller 之前和之后点击它,你应该看到不同的“世代”和随之而来的内存增长。在扩展每一代时,它会显示哪些对象正在占用该内存,每个对象旁边的小箭头会显示它们的分配位置,并帮助您追踪哪些引用阻止它们被释放。

enter image description here

关于ios - PopViewController 占用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22594518/

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