当前位置: 首页 > 面试题库 >

为什么AppDelegate.swift窗口是可选的?

饶滨海
2023-03-14
问题内容

我读苹果文档 ,当我发现这句话:

AppDelegate类仅包含一个属性:window

var window: UIWindow?

此属性存储对应用程序窗口的引用。此窗口表示应用程序视图层次结构的根。这
是绘制所有应用程序内容的地方。请注意,window属性是
可选的 ,这意味着 在某些时候它可能没有任何值(为nil )


我不明白的是:为什么此属性有时可能为零?
变成零的情况是什么?


问题答案:

当您关闭应用程序时,您的应用程序仍可以接收静默通知 或在后台下载数据,跟踪您的位置,播放音乐等。

在下面的图像中,带圆圈的红色表示您的应用仍在执行某项操作时,但不再显示在屏幕上。它在
后台,因此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
}


 类似资料:
  • 问题内容: 访问主窗口时,它将作为 为什么它返回为double可选,这是什么意思?如果放入a中,我应该在其后添加一个? 尽管我的第一个建议是替换为after委托,但这不是解决方案。 问题答案: @matt有详细信息,但是有一个(有点可怕,有点很棒)的解决方法。(不过请参见下面的编辑) 我会将对这一行代码的理解留给读者作为练习。 好吧,我撒谎,让我们分解一下。 好的,到目前为止很好。在这一点上,我们

  • 问题内容: 它以空字符串开头,而不是nil。即使将其显式设置为nil,它仍然是一个空字符串。我不明白 也许通过分配nil使其易于清除?用它编写代码很麻烦。 问题答案: 这是历史性的事情。空字符串和字符串之间没有任何区别。在Objective- C中,无需在两者之间进行区别,因为您可以在Objective-C中调用方法。 同样,在Objective-C中也无法阻止用户分配给属性。生成的合同可以是可选

  • 问题内容: 运行以下代码: 结果是: 上面的代码中没有定义任何窗口框架,它看起来默认的窗口框架是 不确定我对默认窗口框架的理解是否正确 问题答案: 从Spark Gotchas 默认帧规格取决于给定窗口定义的其他方面: 如果指定了ORDER BY子句,并且该函数接受了帧规范,则该帧规范是由RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW定义的, 否

  • 问题内容: 我正在为Java游戏制作自己的自定义服务器软件(游戏和原始服务器软件都是用Java编写的)。没有可用的协议文档,因此我必须使用Wireshark读取数据包。 客户端连接时,服务器将以Gzip格式将其发送到级别文件。在发送大约94个数据包时,我的服务器通过ArrayIndexOutOfBoundsException使客户端崩溃。根据原始服务器的捕获文件,它大约在该点发送一个TCP窗口更新

  • 为什么可选在线? 当可选值包含“nil”时,必须将可选类型“Int?”的值解包为“Int”类型的值,并使用“?”合并,以提供默认值,当可选值包含“nil”时使用“!”强制解包以中止执行 所以这修复了它: 如果我将其分解,则会在添加<code>let index</code>时发生更改。。。。 OK -这将返回first的总计数,total不是可选的: 确定-此枚举和总计不是可选的: 错误 - 这会

  • 问题内容: 我在玩以下问题:将Java 8的Optional与Stream ::flatMap一起使用,并想向自定义添加方法,然后检查其是否有效。 更准确地说,我想在其中添加一个,如果不存在任何值,则返回一个空流,如果存在一个元素,则返回一个具有单个元素的流。 但是,我得出的结论是最终结论。 为什么会这样呢?有很多类未声明为final,因此我个人没有理由在此处声明final。 第二个问题是,如果担