推UINavigationController的许多视图控制器时,内存问题(Memory probl

2019-07-30 02:42发布

我正在为iPad一个互动的书和我使用UINavigationController来实现页面和未来之间的导航。 当用户打开该网页,下一个页被压上的导航堆栈的顶部。

我现在15页到应用程序和应用程序崩溃,当我尝试从第14页转到第15页没有错误消息在控制台中,没有在设备的崩溃日志都不是。

每个视图控制器的情节板中的场景有UIImageViews显示是5MB和20MB之间的图片。 视图控制器的viewDidLoad方法被调用一次。 所有的应用程序的资产总规模低于200B。 我使用ARC。

我已经跑了使用仪器的内存监控的应用程序。 该应用程序的实际内存消耗大约80MB每增加一个新的页面被打开,并且崩溃时达到800MB(该设备是一个iPad 3)。

  • 为什么会有如此巨大的内存消耗? 这是因为在故事板的场景的UIImageView缓存的图片?

  • 什么是当您使用以释放内存的最佳方式UINavigationController和ARC?

我尝试添加所有视图控制器的子视图设置为nil在视图控制器的viewDidDisappear:的方法,但内存消耗保持不变。

Answer 1:

当您使用一个UINavigationController,每个视图控制器,你在内存推撑永远(当然,直到你的应用程序退出),除非你的用户按下特定的ViewController后退按钮。 它使ViewControllers的堆栈 - 在顶部可见之一。

所以,简单的答案是不使用一个UINavigationController这一点 。 我建议建立自己的视图控制器“知道”这是下一个和以前的页面和手动加载,并在有需要时将其删除。 这种方式可以确保您仅在内存中有一个页面一次(除了转换过程中-也许你可以使用这个动画过渡http://cocoacontrols.com/platforms/ios/controls/xbpagecurl )。



Answer 2:

你可能不希望使用一个UINavigationController用于此目的。 你真的想要一个视图控制器来管理所有网页和相同的观点呈现新的一页,同时移除旧。



文章来源: Memory problems when pushing many view controllers on UINavigationController