在我的项目中,我使用UIPageControl
作为容器UIViewController
进行滚动。我使用了本教程(使用ARC
和故事板):http://www.wannabegeek.com/?p=168和源代码:https://github.com/wannabegeek/PageViewController
正如您所看到的,项目中有3个ViewControllers
,它们作为子项添加到CustomPagerViewController
。在该项目中,只添加了3个ViewControllers
,但在我的项目中,我获得了3 ViewControllers
以上,我还将其与其他文本,图像,标签等一起重复使用。问题是,在项目中,只要加载ViewControllers
,所有CustomPagerViewController
都会被加载,这会花费内存,所以我正在寻找另一种方法来解决这个问题而不是加载它们立刻?
答案 0 :(得分:0)
您不应该尝试以这种方式优化控制器分配。显然在内存中保留视图控制器会占用空间,但请相信我,而不是那么多。
我们必须区分控制器和它的视图。视图可以占用大量内存以使自己显示在屏幕上,但iOS已经有了自己的机制来释放不再需要的内存(即:视图不在屏幕上/没有窗口)
用于自行释放视图内存的iOS视图控制器(此行为在[UIViewControllers didReceiveMemoryWarning]中),但在iOS 6中已不再是这种情况。现在您有责任这样做,因为您觉得它是您需要的应用程序。请记住,尽管在这种方法(或dealloc)中使用这些视图,但是你不会节省太多内存,因为用于在屏幕中显示视图的大部分(图形)资源可能已经被iOS发布,并且你可能最终释放的记忆量接近0。
总而言之,在您的情况下,我将使用this guide将PagerViewController转换为适当的iOS容器控制器。关键是调用以下方法:
[UIViewController addChildViewController:]
[UIViewController willMoveToParentViewController]
[UIViewController removeFromParentViewController]
[UIView addSubview:]
[UIView removeFromSuperview]
根据您的需要以正确的顺序。在您的情况下,您可以在scrollViewDidScroll方法中添加/删除这些。以这种方式使用它们,让苹果的魔力发生。
您也可以使用UIPageViewController,它可以为您提供一些不错的开箱即用功能。