如何删除 UIPageViewController 中的 previousViewControllers

Posted

技术标签:

【中文标题】如何删除 UIPageViewController 中的 previousViewControllers【英文标题】:how to remove previousViewControllers in UIPageViewController 【发布时间】:2015-01-30 13:06:58 【问题描述】:

我正在尝试删除 UIPageViewController 中所有以前分配的 ViewControllers 以减少内存使用量我在 UIPageViewController 中有 100 多个页面,因此它占用了太多内存并且看起来 UIPageViewController 没有释放分配的 ViewControllers

【问题讨论】:

内存中不应该有 100 个控制器。 UIPageViewController 的工作方式类似于 UITableViewUICollectionView,它有一个提供控制器的数据源,因此它不应该将所有控制器都保存在内存中, 我知道 tableView 使单元格出列,但在 pageViewController 中正在实例化视图控制器并且永远不会释放它们,直到 pageViewcontroller 收到内存警告或我的应用程序在每个页面中都有一个图像,所以每个图像都被分配但是未发布,这里的答案说了很多question 【参考方案1】:

你可以使用

- (void)setViewControllers:(NSArray *)viewControllers
             direction:(UIPageViewControllerNavigationDirection)direction
              animated:(BOOL)animated
            completion:(void (^)(BOOL finished))completion

pageViewController 的方法来设置你想要显示的新的viewControllers数组,之前的控制器会被释放。

【讨论】:

那么我应该将ViewControllers 设置为仅当前可见的ViewController 还是什么,你能解释一下你的想法吗? 是的,您可以这样做,但您应该查看UIPageViewControllerDataSource 以避免将视图控制器保留在内存中,它们将由 UIPageViewController 正确处理。 我只是这样做了,但是如果我向右或向左滑动就没有更多页面了,它没有得到任何新页面,你的意思是我应该查看数据源我应该在那里做什么?跨度> 这里是一个 UIPageViewController 使用数据源makemegeek.com/uipageviewcontroller-example-ios 的例子希望对你有帮助,你也可以查看苹果文档了解更多信息。

以上是关于如何删除 UIPageViewController 中的 previousViewControllers的主要内容,如果未能解决你的问题,请参考以下文章

从 UIPageViewController 中删除之前添加的 viewController

从 Swift 3 中的 UIPageViewController 中删除黑边

从 UIPageViewController 中移除页面指示器

iOS 7 iPad:UIPageViewController 中的 UITableView 滑动删除(手势识别器冲突)

我可以禁用UIPageViewController的页面边框手势识别器吗?刷卡一个?

如何从属于 UIPageViewController 的 UIViewController 之一更改 UIPageViewController?