ios - UIView 和 UIViewController 设计模式

标签 ios cocoa-touch uiviewcontroller cocoa-design-patterns

当 ViewController 在其方法中创建另一个 ViewController 时(比如 viewDidLoad 或 viewWillAppear),这是正确的吗?

就我而言 - 我有一个 View A,其中包含其他几个 View - B 和 C,它们本身非常复杂,因此为它们设计了特殊的 View Controller vcB 和 vcC,并且这些 View Controller 是在 vcA View 内创建的 View A 的 Controller 。

这样可以吗?例如,如果 vcA 将自己设置为 vcB 的委托(delegate),该怎么办?这意味着 vcB 将保留 vcA。在这种情况下,为了正确释放所有对象,我们需要在某个地方将 vcB 的委托(delegate)设置为 nil,但是什么时候这样做最好呢? viewWillDisappear:viewDidDisappear:或smth。别的?

我确信这不是唯一出现问题的情况,因此我正在寻求您的意见,如何正确设计 View Controller 之间的此类交互。

最佳答案

我目睹了一种教条式的坚持,即一次只能运行一个 View Controller 。就我自己而言,如果可以简化整体设计(降低复杂性)并使设计管理更容易,我倾向于同时使用多个 View Controller 。正如您可以在 recent response that I posted 中读到的那样,在我看来,Apple 通过提供对自定义内容 View Controller 的支持,允许您同时操作多个 View Controller ,已朝着相同的方向前进。

乔纳·威廉姆斯 (Jonah Williams) 的博客值得一读,只是为了了解您可能需要处理的问题。但坦率地说,我没有遇到任何与他的建议相矛盾的问题。 (那篇文章大约有一年了。)

View Controller 的一个关键部分是保存它所管理的 View 的委托(delegate)方法。 View 实际上并不关心哪个对象充当其委托(delegate)。因此,如果您想要一个与单 VC 观点更加和谐的设计,您可以将委托(delegate)方法放入子类 NSObject 中,而不将其称为 View Controller 。不过,您很可能必须创建 UIViewController 中已有的一些方法。但这样你就不必将其称为 View Controller 。我,我只是子类化 UIViewCcontroller。

关于ios - UIView 和 UIViewController 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9437980/

相关文章:

ios - 动画持续时间 :delay:options:animations:completion: blocking UI when used with UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse

ios - SKCloudServiceController().requestUserToken 在 iOS 14.2 上卡住

android - React Native 中的 Picker 和 PickerIOS 错误

ios - 将背景图像添加到 View Controller

ios - 将方向从垂直更改为倒置时更改 Controller 的颜色

iphone - IOS 上的 C++ WCHAR 和 WString

ios - Xcode 在 UITableRowSelection 之后显示 UIAlertView?

ios - 滚动 UICollectionView 时忽略嵌入式 UIButton 的触摸事件

objective-c - 带水平滚动的 PDF View

ios - block 初始化的 ViewController 提前释放