6

在我的项目中,我使用 aUIPageControl作为UIViewController滚动容器。我使用了本教程(使用ARC和故事板):http ://www.wannabegeek.com/?p=168和源代码:https ://github.com/wannabegeek/PageViewController 如您所见ViewControllers,项目中有 3 个,并且它们作为子元素添加到CustomPagerViewController. 在那个项目中,只ViewControllers添加了 3 个,但在我的项目中,我得到了 3 个以上ViewControllers,并且我还重复使用了它们,上面还有其他文本、图像、标签等。问题是,在项目中,所有这些ViewControllers都会在加载时CustomPagerViewController加载,这会消耗内存,所以我正在寻找另一种方法来处理这个问题,而不是一次加载它们?

4

1 回答 1

0

您不应该尝试以这种方式优化控制器分配。显然,在内存中保留视图控制器会占用空间,但相信我,并没有那么多。

我们必须在这里区分控制器和它的视图。为了让自己显示在屏幕上,视图可能会占用大量内存,但 iOS 已经有自己的机制在不再需要时释放这些内存(即:视图不在屏幕上/没有窗口) .

iOS 视图控制器过去常常自己释放视图内存(这种行为在 [UIViewControllers didReceiveMemoryWarning] 中),但在 iOS 6 中不再是这种情况。现在你有责任这样做,因为你觉得你的应用程序需要它。请记住,尽管在此方法(或 dealloc)中取消了这些视图,但您不会节省太多内存,因为用于在屏幕中显示视图的大部分(图形)资源可能已经被 iOS 释放,并且您最终可能释放的内存量接近 0。

总而言之,在您的情况下,我会使用本指南将 PagerViewController 转换为合适的 iOS 容器控制器。关键是调用以下方法:

[UIViewController addChildViewController:]
[UIViewController willMoveToParentViewController]
[UIViewController removeFromParentViewController]
[UIView addSubview:]
[UIView removeFromSuperview]

根据您的需要以正确的顺序排列。在您的情况下,您可以在 scrollViewDidScroll 方法中添加/删除这些。以这种方式使用它们,让 Apple 的魔法发生。

您不妨使用UIPageViewController,它为您提供了一些很好的开箱即用功能。

于 2013-05-13T12:12:48.273 回答