gpt4 book ai didi

swift - @main 和 @uiapplicationmain 有什么区别

转载 作者:行者123 更新时间:2023-12-04 16:37:39 29 4
gpt4 key购买 nike

我需要帮助了解何时使用 @main对比 @uiapplicationmain .
据我所知,@uiapplicationmain是一种更简单的方式来调用 uiapplicationmain(:::)@uiapplicationmain 之后创建的类在哪里用作应用程序代理。我也知道它还会创建一个 UIApplication .
我也知道应用程序委托(delegate)成为项目的入口点。
根据我所读到的内容,我被告知 @main也是一个入口点,但它需要一个 main 函数。
我想知道的是它们的主要入口点是什么意思。就像 Xcode 为使其成为“入口”点所做的那样。以及如何整@main事情有效,因为它与 @uiapplicationmain 有何不同以及它对 Xcode 运行代码的方式有何影响。

最佳答案

所有代码都有一个入口点:调用该代码的人实际调用的地方。由许多 Swift 文件组成的整个程序实际上是如何开始的?我们需要整个程序的入口点,运行时将调用它来启动我们。
在 Swift 中,这是 main.swift 文件。它的工作是调用 UIApplicationMain,它创建一些实例,包括应用程序和应用程序委托(delegate),并使事件循环运行(并在应用程序运行的其余时间保持运行)。最小的 main.swift 文件必须如下所示:

import UIKit
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv, nil,
NSStringFromClass(AppDelegate.self)
)
然而,从来没有人使用过 main.swift 文件!它是样板文件,所以何必呢?相反,你说 @main ,并在幕后为您生成一个 main.swift 文件。特别是,你把属性 @main在您的 AppDelegate 类上,因此 main.swift 生成器知道将哪个类实例化为您的应用程序委托(delegate)。
还有两件事要知道:
  • 在 Swift 5.3 之前,@main被称为 @UIApplicationMain反而。从这个角度来看,它们是相同的,同一事物的两个名称。
  • Swift 5.3 和 Xcode 12 中的新功能,您可以将自己的类型之一指定为 @main并给它一个静态 main函数,您可以在其中执行您在 main.swift 文件中所做的任何操作。那是什么@UIApplicationMain无法做到:
  •     @main
    struct MyMain {
    static func main() -> Void {
    UIApplicationMain(
    CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(AppDelegate.self)
    )
    }
    }

    关于swift - @main 和 @uiapplicationmain 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67429098/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com