Ios 避免在自定义UIViewController容器中加载数百个视图控制器

Ios 避免在自定义UIViewController容器中加载数百个视图控制器,ios,model-view-controller,uiviewcontroller,uinavigationcontroller,viewcontroller,Ios,Model View Controller,Uiviewcontroller,Uinavigationcontroller,Viewcontroller,我编写了一个自定义UIViewController容器,其作用类似于Flipboard的页面。用户可以滑动/点击作为子视图控制器的“页面”。我觉得我写得很好,但我担心我会遇到一个场景,那里可能有数百个子视图控制器。我希望避免将所有这些视图控制器加载到内存中(因为它们都将具有包含大量数据的UICollectionView) 因为有一个手势交互用于浏览视图,所以我需要将每个“下一个”和“上一个”视图添加到容器视图并加载,以便在用户开始浏览另一个页面时可见 如何阻止每个视图控制器的-viewDidLo

我编写了一个自定义UIViewController容器,其作用类似于Flipboard的页面。用户可以滑动/点击作为子视图控制器的“页面”。我觉得我写得很好,但我担心我会遇到一个场景,那里可能有数百个子视图控制器。我希望避免将所有这些视图控制器加载到内存中(因为它们都将具有包含大量数据的UICollectionView)

因为有一个手势交互用于浏览视图,所以我需要将每个“下一个”和“上一个”视图添加到容器视图并加载,以便在用户开始浏览另一个页面时可见


如何阻止每个视图控制器的-viewDidLoad发生,以便仅在需要时加载每个视图控制器?是否有任何“最佳实践”或示例UIViewController容器,我可以从中获得一些仅加载下一个/上一个子控制器的想法?

理论上,您应该有一个容器
UIViewController
和两个
UIViewController
(如您所说)。一个是下一个,另一个是上一个。然后,您可以保留对两者的引用,当您即将转到下一个(例如)时,只需更新它,如:

- (void)updateViewController:(UIViewController *)viewController withDataSource:(NSDictionary *)dataSource;

最后您有3个
UIViewControllers
。其他解决方案也是可能的,您可以随时查看GitHub以获得一些灵感或CocoaControls

我唯一的问题是,在创建控制器时,我需要能够执行类似-initWithControllers:(NSArray*)。。。也许我应该改变结构以脱离数据数组而不是控制器?不过,我唯一担心的是,它打破了它只是控制器容器的想法,现在它变成了视图控制器,而不像UINavigationController只是处理VC堆栈+转换。转换和数据源是不同的。您可以允许每个
UIViewController
(下一个和上一个)访问数据源,或者容器向它们提供数据。。。(我会选择第一个)你让我走对了方向!我更改了访问视图控制器的方式。我没有控制器数组,而是为每个视图控制器请求一个数据源。这将使ViewController的负载保持较低,仅限于需要创建的控制器。