首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PopViewController占用内存

PopViewController占用内存
EN

Stack Overflow用户
提问于 2014-03-24 01:38:13
回答 3查看 2.7K关注 0票数 2

我用的是ARC。我有UINavigationController要推送和弹出。碰巧的是,其中一个ViewController是一个巨大的滚动视图,可以支持100MB。在popViewController之后,包含滚动视图的ViewController应该被释放。NSLog显示调用了dealloc。但是,100MB内存仍被占用。正常吗?

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

提前感谢

Ref:Memory not released when popViewController Called APURV建议有一种iOS的缓存机制来保持内存。这是真的吗?

编辑:在Xcode中从调试导航器中观察到内存使用情况

EDIT2:

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

中间的峰值是100MB的滚动视图,现在如果我使用popViewController,它又回到了12MB。这让我认为在iOS中确实存在缓存,并且依赖于内存可用性。当它超出内存时,缓存将被冲走,同时,释放也将立即发生。

稍后,我还会尝试在这里学习如何测量和发布结果。

EN

回答 3

Stack Overflow用户

发布于 2014-03-24 01:51:31

保存在内存中的不一定是视图控制器本身,而是它包含的大量对象。

你应该看看Instruments,看看到底是怎么回事。如果你使用“分配”工具,并运行你的应用程序,你会在边上看到一个"Mark Generation“按钮。

如果你在推入和弹出视图控制器之前和之后点击它,你应该会看到不同的“代”和随后的内存增长。当展开每一代时,它将显示哪些对象占用了该内存,每个对象旁边的小箭头将显示它们被分配到哪里,并帮助您跟踪哪些引用阻止了它们被释放。

票数 4
EN

Stack Overflow用户

发布于 2014-03-24 02:01:33

你的代码可能是完全正确的。我已经看到很多次XCode中内存条的配置可能会产生误导,也许这就是发生在你身上的事情。

您需要打开编辑方案...对话框,并禁用当前方案配置中诊断下的Enable Zombies选项。

票数 2
EN

Stack Overflow用户

发布于 2018-10-11 23:02:02

如果你的视图控制器仍然没有被释放,那么调用popview控制器将从popped.However控制器中移除导航控制器的引用,这意味着其他人正在持有它。

在xcode中使用debug memory graph选项,因为它显示了对内存中当前存在的对象的传入和传出引用。您所需要做的就是识别引用并使其变弱。我不建议将其设为无主,因为这样你就必须完全确定当你使用该对象时,该对象将会出现。所以弱化总是一种更安全的做法。

希望这能帮助到一些人..!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22594518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档