为什么一个视图控制器创建了两次?

Why is a view controller created twice?

我的 AppDelegate::didFinishLaunchingWithOptions 中有以下代码:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    createContainer { container in
        let storyboard = self.window?.rootViewController?.storyboard

        guard let vc = storyboard?.instantiateViewController(withIdentifier: "Main") as? MainViewController else {
            fatalError("Cannot instantiate root view controller")
        }

        vc.context = container.viewContext
        self.window?.rootViewController = vc
    }

    return true
}

我的MainViewController是在启动时创建的,堆栈显示如下:

0 MainViewController.viewDidLoad()
UIApplicationMain
main
start

然后在下面一行里面创建:

self.window?.rootViewController = vc

这是我第一次看到 vc 创建了两次。
这正常吗?
我有什么办法可以防止这种情况发生吗?

UIApplicationMain 在您收到 application:didFinishLaunchingWithOptions: 消息之前自动实例化主故事板的初始视图控制器。您不应该在 application:didFinishLaunchingWithOptions:.

中“手动”实例化它