gpt4 book ai didi

objective-c - 将 UIViewController 的 View 添加到另一个 UIViewController 的 View 是否可取?

转载 作者:可可西里 更新时间:2023-11-01 05:06:44 24 4
gpt4 key购买 nike

UIViewControllerview 添加到另一个 UIViewControllerview 是否可取?

请解释为什么这是好的做法或不好的做法。

最佳答案

Apple 和大多数遵循 Apple 指南的人会告诉您这是不好的做法,Apple 正是出于这个原因添加了 ViewController 包含 (childViewControllers)。不幸的是,大多数人盲目地遵循这一点并且不会告诉你为什么这是不好的做法。我很高兴你问这个问题。

事实是,在模型- View - Controller 架构中,无论 View 包含什么内容, View 都应该是可重用的,因此 View 和控制 View 内容的对象不应该相同。这正是 UIViewController 在 iOS5 之前所做的事情,Apple 不鼓励您多次使用它们,而这是一件非常合乎逻辑的事情。当然,这很令人困惑,许多人无视指南并仍然这样做,包括我自己在内,应用程序运行良好并通过了应用程序商店验证,这导致了更多的困惑。结果是,在 Apple 屈服并给了我们自定义容器 ViewControllers 一年多之后,直到今天人们仍然在问这个问题。我见过人们经常用复杂的答案来回答这个问题,就非常简单的问题而言,将 UIViewController 重新创建为从 NSObject 继承的类。只是因为 Apple 不鼓励使用 UIViewControllers,甚至不知道为什么。

由于将 ViewController 的 View 添加为 subview 通常可以完美地工作,并且 ViewController 包含在许多人仍然支持的 iOS4 中不可用,所以太多人不会费心使用 ViewController 包含。它是更简洁的解决方案,当您想要在 ViewController 中使用 ViewController 时,您应该尽可能使用它。如果不是,在大多数情况下,您应该能够简单地将 ViewController 的 View 添加为 subview ,您只需要知道在哪些情况下。

如果您只是将 ViewController 的 View 添加到另一个 View ,您会得到以下结果:

  • 不保证调用 View 回调方法。 viewWillAppear、viewDidAppear、viewWillDisappear 和 viewDidDisappear 等方法可能会或可能不会被调用。这在很大程度上取决于操作系统版本,在 iOS4 中它们永远不会被调用,在 iOS5 及更高版本中它们大多会被调用。所以您不能重写这些方法,因为您不能依赖它们,您无法控制它们何时、是否会被调用或被调用多少次。
  • 唯一始终会被正确调用的 View 回调方法是 viewDidLoad。
  • 不会调用轮换回调。根据您的情况,这可能是一个大问题或根本不重要。如果 View 的 autoresizingmask 足以重新定位和重新缩放它,那么你就可以了。如果没有,您始终可以在调用 super View 的 ViewController 的旋转回调时执行自定义实现。
  • 您必须自己保留对 ViewController 的引用,否则它会立即被释放,而其 View 仍由其父 View 保留。

我绝对不会鼓励它,但我也不劝阻它。这是视情况而定的,如果您不再需要支持 iOS4,那么您基本上可以避免它。但是,如果您记住上面的列表,那么它也不会造成任何伤害,您的应用程序将正常运行。

关于objective-c - 将 UIViewController 的 View 添加到另一个 UIViewController 的 View 是否可取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9409166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com