【问题标题】:Downside of using View Controller Containment使用 View Controller Containment 的缺点
【发布时间】:2015-09-01 00:22:08
【问题描述】:

我开发了很多 iOS 应用,并在页面管理等方面构建了相当复杂的用户流程。

在许多情况下,UINavigationController 堆栈非常适合推送可能的页面树,但缺乏我所寻找的很多可定制性。

当需要可定制性时,我最终会使用大量的 ViewController 容器。它看起来像这样:

//ParentViewController.m
@interface ParentViewController ()

@property (nonatomic, strong) ChildViewController *childViewController;

@end

@implemenation ParentViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.childViewController = [[ChildViewController alloc]init];
    [self addChildViewController:self.childViewController];
    [self.view addSubview:self.childViewController.view];
    [self.childViewController didMoveToParentViewController:self];
}

当然,这是一个超级简单的例子,它比子类 UIViews 作为 VC 的主视图和更多的逻辑要复杂很多倍,但我倾向于这样做,有时甚至嵌套 5 到 10 次不同的风投。

所以我的问题是:在内存和实用性方面,做 VC Containment 是否有任何缺点(当然,除了手动处理堆栈的额外工作,例如“返回”按钮)?

【问题讨论】:

  • 您的方法看起来效率不高。你能告诉你在 UINavigationController 中你想要做什么以及你需要什么类型的自定义吗?
  • 例如,我有一些应用程序需要将某些视图从一个视图控制器动画化到另一个(在中间更改超级视图,多次使用 UIWindow 作为超级视图)。 UINavigation 堆栈使这非常困难。以什么方式效率低下?代码量?还是记忆明智?
  • @AlexKoren 我认为与您的结构相比,使用 UINavigationController 中的 UIWindow 动画视图的难度不会小。与其问你当前方法的缺点,不如在另一个问题中告诉我你想克服的问题。我可以提供帮助,我相信一定有更好的方法:)
  • 没有任何问题!我喜欢我的应用程序的发布方式和它们的结构方式。我只是想知道为什么更多的人不像我那样使用 View Controller 遏制。也许有我不知道的管理问题。
  • 你不能保留导航堆栈,而是使用自定义过渡吗?

标签: ios objective-c iphone uiviewcontroller


【解决方案1】:

我想说复杂性和可维护性是视图控制器包含的主要缺点。您需要正确处理视图控制器包含的许多细节,否则事情可能会以奇怪的方式中断。

有关正确实施视图控制器包含的更多技术帮助,请参阅:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html#//apple_ref/doc/uid/TP40007457-CH11-SW1

...请务必阅读标题为将子视图控制器添加到您的内容的部分

【讨论】:

  • 我在寻找更多的技术答案,但我会奖励你。如果有人从纯粹的内存/性能角度有任何信息,请随时提出另一个答案!
  • 用我的首选参考更新了我的答案,以确保我正确地查看控制器遏制。请注意,很有可能实现看似正常工作,但在某些晦涩的场景中会以奇怪的方式中断。
猜你喜欢
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
相关资源
最近更新 更多