当我发现这句话时,我正在阅读Apple文档:
本
AppDelegate
类仅包含一个属性:window
.
var window: UIWindow?
此属性存储对应用程序窗口的引用.此窗口表示应用程序视图层次结构的根.它是您绘制所有应用内容的地方.请注意,window属性是 可选的,这意味着它在某些时候可能没有值(为零).
我不明白的是:为什么这个属性在某些时候可能是零?是什么情况(来)是零?
当您关闭应用程序时,您的应用程序仍然可以在后台接收静音通知或下载数据,跟踪您的位置,播放音乐等.
在下面的图像中,包围的红色 适用于您的应用仍处于执行状态的情况,但不再显示在屏幕上.它在后台,所以AppDelegate
不再需要window
了.因此,它将被设置为nil
FWIW,下面的代码不会使应用程序启动vc
.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { let vc = ViewController() window?.rootViewController = vc window?.makeKeyAndVisible() return true }
为什么它不起作用?因为该window
属性是可选的 - 最初设置为nil.它需要实例化
下面的代码将起作用
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { let vc = ViewController() window = UIWindow(frame: UIScreen.main.bounds) // Now it is instantiated!! window?.rootViewController = vc window?.makeKeyAndVisible() return true }
你可能并不总是需要它.例如,当调用这两个方法时:
application(_:performFetchWithCompletionHandler:) application(_:handleEventsForBackgroundURLSession:completionHandler:)
您的应用不会向用户显示,因此不需要window
.
一如既往,更多的文档
现在,我不确定这是内在的原因,但它似乎是一个足够好的可能性(至少对我而言).虽然如果有人能够提供更多信息,我也很乐意学习更多信息.