Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.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提供最多30个ViewController(ARC)的最佳方式_Ios_Objective C_Uitableview_Uipageviewcontroller - Fatal编程技术网

iOS提供最多30个ViewController(ARC)的最佳方式

iOS提供最多30个ViewController(ARC)的最佳方式,ios,objective-c,uitableview,uipageviewcontroller,Ios,Objective C,Uitableview,Uipageviewcontroller,我希望将同一个ViewController最多演示30次(最多)。该应用程序通过一系列步骤完成一系列信息。UI仅包含一个显示文本信息的webview,但有时会添加一个tableview,以便用户根据信息回答问题。我已经尝试了很多方法,但是哪种方法是实现这一点的最有效的内存方法,尽管我可以让它正常工作,但我得到了大量的废弃内存,这大大减慢了应用程序的速度(我使用ARC) 选项1 我试过使用UIPageViewController,它工作得很好,但在iphone4上它运行缓慢且滞后 [self.pa

我希望将同一个ViewController最多演示30次(最多)。该应用程序通过一系列步骤完成一系列信息。UI仅包含一个显示文本信息的webview,但有时会添加一个tableview,以便用户根据信息回答问题。我已经尝试了很多方法,但是哪种方法是实现这一点的最有效的内存方法,尽管我可以让它正常工作,但我得到了大量的废弃内存,这大大减慢了应用程序的速度(我使用ARC)

选项1 我试过使用
UIPageViewController
,它工作得很好,但在iphone4上它运行缓慢且滞后

[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
选项2 我尝试过将viewcontroller(打开到自身上)推到另一个位置,它仍然可以正常工作,但是内存没有被释放,被放弃的内存增加到大约20mb a heapshot

用户不必返回到上一个视图,因此在我进行操作时尝试删除堆栈中的ViewController,但内存仍在增加

我已经为这个问题挣扎了好几个星期了,肯定有一个内存有效的解决方案吗

在Mac电脑被扔出窗口之前,一品脱的成功答案:)


提前感谢

ViewControlle可能包含太多资源,例如图像、图像视图、视图、标签。。。所有这些UI单元都将占用大量内存。因此,我认为展示30个视图控制器的最佳方式有两点需要注意

  • 使用滚动视图显示内容,视图控制器中的所有元素都可以放入其中
  • 使用延迟加载来显示内容。结合滚动视图,您可以使用视图。Cycle scroll view(循环滚动视图)将加载最近的三幅图像并将其保存在内存中,因此无论显示多少视图,内存都将保持在较低的水平

  • 试试这个。编码以显示多个项目。

    我坚持使用UIPageViewController。假设您正确使用了
    数据源
    委托
    方法,则在任何给定时间内存中最多应有3个ViewController(当前显示的VC、下一个VC和上一个VC)。iOS将负责这些设备两侧的ViewController的内存管理


    如果你想要一个更详细的答案,你应该发布一些代码。从你的问题中不清楚你想要完成什么。

    我不知道这个答案是否值得,但我认为在你进行时从堆栈中删除视图控制器是正确的方法(最好在你展示下一个视图控制器之后)。因为您使用的是ARC,并且视图控制器没有从内存中删除,所以您必须在某个地方有一个循环引用。我会尝试找到循环引用,因为无论您选择何种路径,如果循环引用持续存在,这些视图控制器将永远不会离开内存。您可以做一些简单的事情来帮助找到它:

    首先,检查对未被删除的视图控制器的所有引用。它们是否设置为
    nil

    其次,检查将视图控制器传递到块中的任何位置(包括从块引用self或self属性的位置)。那个街区被保留在什么地方了吗?或者它正在走向完成并被摧毁

    第三,尝试分析应用程序。有时,进入构建菜单并单击“配置文件”会出现有趣的结果


    最后,你可以尝试一下乐器。我不知道你会从中发现多少,除了内存泄漏之外,但如果所有其他方面都失败了,那可能值得一试。

    现在还不完全清楚你在问什么,但只需使用容器视图即可,这些天在iOS中感谢Joe,我会看一看。感谢alot lynulzy以前做过这件事,但在这种情况下没有尝试过。