Ios 在UINavigationController上推送多个视图控制器时出现内存问题
我正在为iPad制作一本互动书,并使用Ios 在UINavigationController上推送多个视图控制器时出现内存问题,ios,uiimageview,automatic-ref-counting,uistoryboard,Ios,Uiimageview,Automatic Ref Counting,Uistoryboard,我正在为iPad制作一本互动书,并使用UINavigationController实现页面和下一页之间的导航。当用户翻页时,下一页被推到导航堆栈的顶部 我现在已经进入应用程序15页,当我试图从第14页转到第15页时,应用程序崩溃。控制台中没有错误消息,设备的崩溃日志中也没有任何内容 故事板中每个视图控制器的场景都有UIImageViews显示5MB到20MB之间的图像。视图控制器的viewDidLoad方法只调用一次。该应用程序所有资产的总规模低于200亿美元。我用的是ARC 我已经用Instr
UINavigationController
实现页面和下一页之间的导航。当用户翻页时,下一页被推到导航堆栈的顶部
我现在已经进入应用程序15页,当我试图从第14页转到第15页时,应用程序崩溃。控制台中没有错误消息,设备的崩溃日志中也没有任何内容
故事板中每个视图控制器的场景都有UIImageViews
显示5MB到20MB之间的图像。视图控制器的viewDidLoad
方法只调用一次。该应用程序所有资产的总规模低于200亿美元。我用的是ARC
我已经用Instruments的内存监视器运行了这个应用程序。每次打开新页面时,该应用程序的实际内存消耗会增加约80MB,当达到800MB时就会崩溃(该设备是iPad3)
- 为什么会有如此巨大的内存消耗?这是因为故事板场景中的UIImageView缓存了图像吗
- 当你使用电脑时,释放内存的最好方法是什么
和ARCUINavigationController
我尝试在视图控制器的
viewdiddemouse:
方法中将所有视图控制器的子视图设置为nil,但内存消耗保持不变 您可能不想为此使用UINavigationController。您确实需要一个视图控制器来管理所有页面,并在删除旧页面的同时在同一视图上呈现新页面。当您使用UINavigationController时,您按下的每个视图控制器将永远留在内存中(直到您的应用程序退出),除非您的用户按下该特定视图控制器上的“上一步”按钮。它保留了一堆ViewController,其中可见的一个位于顶部
因此,简单的答案是不要为此使用UINavigationController。
我建议您构建自己的ViewController,“知道”下一页和上一页,并在需要时手动加载和删除它们。通过这种方式,您可以确保一次只有一个页面在内存中(过渡期间除外-也许您可以使用此动画进行过渡)。听起来像UIPageViewController。