我需要帮助理解何时使用@main
和@uiapplicationmain
。
据我所知,@uiapplicationmain
是一种更容易调用uiapplicationmain(:::)
的方法,在这里,在@uiapplicationmain
之后生成的类被用作App。我还知道它还创建了一个UIApplication
。
我也知道,应用程序委托成为项目的入口点。
据我所读,我被告知@main
也是一个入口点,但它需要一个主函数。
我想知道的是,主要切入点是什么意思。就像Xcode为了使它成为“入口”点所做的事情。以及整个@main
是如何工作的,就像它与@uiapplicationmain
有何不同,以及它对Xcode运行代码的方式做了什么。
发布于 2021-05-11 03:22:19
所有代码都有一个入口点:调用该代码的人实际调用的位置。包含许多Swift文件的整个程序是如何真正开始的呢?我们需要一个整个程序的入口点,运行时将调用这个入口点来启动我们。
在Swift中,这是main.swift文件。它的工作是调用UIApplicationMain,它创建一些实例,包括应用程序和应用程序委托,并使事件循环运行(并在应用程序运行的其余时间保持运行)。最小的main.swift文件必须如下所示:
import UIKit
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv, nil,
NSStringFromClass(AppDelegate.self)
)
但是,从来没有人使用过main.swift文件!这是样板,那为什么要麻烦呢?相反,您可以说是@main
,然后在幕后为您生成一个main.swift文件。特别是,将属性@main
放在AppDelegate类上,以便main.swift生成器知道要实例化哪个类作为应用程序委托。
还有两件事要知道:
@main
被称为@UIApplicationMain
。从这个角度来看,他们是相同的,两个名称相同的东西。@main
,并为其提供一个静态main
函数,您可以在main.swift文件中做任何您应该做的事情。这是@UIApplicationMain
无法做到的: @main
struct MyMain {
static func main() -> Void {
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(AppDelegate.self)
)
}
}
发布于 2021-05-07 04:50:40
@main是在iOS 14中引入的新SwiftUI生命周期的一部分。
@uiapplicationmain是UISceneDelegate和UIApplicationDelegate的旧版本,但仍在使用中。两者都代表了应用程序的生命周期。
https://stackoverflow.com/questions/67429098
复制相似问题