- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
全部,
在我的 ParentViewController
中使用多个 ChildViewControllers
时,我遇到了一些性能/内存问题。这是我的情况:我有一个 ParentViewController
,其中包含动态数量的 ChildViewControllers
- 有时多达 20 个。它们包含在 UIScrollView
中, 并被分页。当我在页面上有几个时我遇到了问题(我只加载前两个,然后在我滑动时构建其他的),但是,在 ParentViewController
中有那么多开始由于内存导致一些崩溃。
ChildViewController
中有很多内容,我正在检查它以确保它尽可能高效,但是,我担心这种方法在旧设备上的工作(如是,我在 5S 上遇到了崩溃)。
将 View Controller 更改为 View 似乎会有所帮助,但由于 VC 很复杂,这将是一项相当大的工作。我的一个建议是从现有 View Controller 的 View 创建一个 View ,并在 View 上设置几个委托(delegate)方法,并以这种方式与 ParentViewController
的 View 进行交互。与当前使用 ChildViewControllers
的方法相比,是否有人对该方法的效率有任何想法?
我的另一个想法是构建一个自定义的 ContainerViewController
并让其中的所有子项都可以滑动,但我不确定这是否比在UIScrollView
.
有什么想法吗?
最佳答案
我个人不提倡重构您的代码以使用 View 而不是 View Controller 。 View Controller 本身不太可能是内存问题的根源,而是它们跟踪的模型对象(以及 View Controller 的 View 使用的 Assets )。我认为关键是在 View Controller (及其 View )滚出屏幕时简单地删除它们。
在您的滚动逻辑中,当您添加滚动到 View 中的 subview Controller 时,您可能正在执行所有适当的包含调用:
UIViewController *newChildViewController = ...
[self addChildViewController:newChildViewController];
newChildViewController.view.frame = ...;
[self.scrollView addSubview:newChildViewController.view];
[newChildViewController didMoveToParentViewController:self];
(请参阅 WWDC 2011 视频 Implementing UIViewController Containment 讨论为什么执行这些包含调用很重要,即保持 View Controller 层次结构与 View 层次结构同步。)
当 subview 滚出 View 时,您只需执行适当的包含调用即可删除子 Controller (及其 View ):
[childViewControllerToRemove willMoveToParentViewController:nil];
[childViewControllerToRemove.view removeFromSuperview];
[childViewControllerToRemove removeFromParentViewController];
// also remove any other strong references you have to that childViewControllerToRemove
或者,您可能想考虑使用 UIPageViewController
它(在 iOS 6+ 中)为 transitionStyle
提供滚动页面 View (UIPageViewControllerTransitionStyleScroll
)。这简化了您必须编写的自定义容器代码的数量,以处理滚动进出 View 的 View Controller 。 UIPageViewController
正是为这种在一堆不同 View Controller 的 View 中滚动(或分页)的情况而设计的。查看Page View Controllers iOS View Controller Catalog 中的讨论。
关于ios - 需要有关多个 subview Controller 的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21142193/
我是一名优秀的程序员,十分优秀!