我读苹果文档 ,当我发现这句话:
本AppDelegate类仅包含一个属性:window。
AppDelegate
window
var window: UIWindow?
此属性存储对应用程序窗口的引用。此窗口表示应用程序视图层次结构的根。这 是绘制所有应用程序内容的地方。请注意,window属性是 可选的 ,这意味着 在某些时候它可能没有任何值(为nil ) 。
我不明白的是:为什么此属性有时可能为零? 变成零的情况是什么?
当您关闭应用程序时,您的应用程序仍可以接收静默通知 或在后台下载数据,跟踪您的位置,播放音乐等。
在下面的图像中,带圆圈的红色表示您的应用仍在执行某项操作时,但不再显示在屏幕上。它在 后台,因此AppDelegate不再需要window了。结果,它将被设置为nil
简单概述
详细概述
FWIW,下面的代码不会使该应用通过启动vc。
vc
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { let vc = ViewController() window?.rootViewController = vc window?.makeKeyAndVisible() return true }
为什么不起作用?因为该window属性是可选的,所以最初设置为nil。需要实例化
该window
下面的代码可以工作
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 }