UIViewController 的与众不同之处在于,它不但配备了无参数的 init() 初始化方法,还拥有诸如 init?(coder:) 和 init(nibName:bundle:) 这样的自定义初始化方法。在 Swift 语言中,通常情况下,自定义初始化器的存在会阻止编译器自动生成默认初始化器。然而,由于 UIViewController 是一个源自 Objective-C 的类,其初始化器的行为受到了这一背景的影响: Objective-C 兼容性:鉴于 UIKit 框架最初是基于 Objective-C 语言开发的,其中无参数的初始化方法十分普遍。为了在 Swift 中维持这一历史传统并确保向后兼容性,UIViewController 保留了这一行为。 多样化的创建选项:通过结合 init() 和多种自定义初始化方法,UIViewController 为开发者提供了多种创建实例的途径,这取决于视图控制器是通过代码编程创建的、基于故事板的还是从 nib 文件中加载的。 这种特殊的行为模式凸显了 UIKit 在采纳 Swift 初始化语法的同时,如何巧妙地维持了与 Objective-C 的兼容性。