Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UINavigationController上推送多个视图控制器时出现内存问题_Ios_Uiimageview_Automatic Ref Counting_Uistoryboard - Fatal编程技术网

Ios 在UINavigationController上推送多个视图控制器时出现内存问题

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

我正在为iPad制作一本互动书,并使用
UINavigationController
实现页面和下一页之间的导航。当用户翻页时,下一页被推到导航堆栈的顶部

我现在已经进入应用程序15页,当我试图从第14页转到第15页时,应用程序崩溃。控制台中没有错误消息,设备的崩溃日志中也没有任何内容

故事板中每个视图控制器的场景都有
UIImageViews
显示5MB到20MB之间的图像。视图控制器的
viewDidLoad
方法只调用一次。该应用程序所有资产的总规模低于200亿美元。我用的是ARC

我已经用Instruments的内存监视器运行了这个应用程序。每次打开新页面时,该应用程序的实际内存消耗会增加约80MB,当达到800MB时就会崩溃(该设备是iPad3)

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

  • 当你使用电脑时,释放内存的最好方法是什么
    UINavigationController
    和ARC


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

您可能不想为此使用UINavigationController。您确实需要一个视图控制器来管理所有页面,并在删除旧页面的同时在同一视图上呈现新页面。

当您使用UINavigationController时,您按下的每个视图控制器将永远留在内存中(直到您的应用程序退出),除非您的用户按下该特定视图控制器上的“上一步”按钮。它保留了一堆ViewController,其中可见的一个位于顶部

因此,简单的答案是不要为此使用UINavigationController。
我建议您构建自己的ViewController,“知道”下一页和上一页,并在需要时手动加载和删除它们。通过这种方式,您可以确保一次只有一个页面在内存中(过渡期间除外-也许您可以使用此动画进行过渡)。

听起来像UIPageViewController。