Xcode 12 中的“@main”是什么意思?

What does "@main" mean in Xcode 12?

Xcode 12 includes support for using @main in place of @UIApplicationMain or @NSApplicationMain in UIKit- or AppKit-based apps. source

新创建的Xcode 12 个项目现在使用@main 指示应用程序起点。

  1. 这是什么意思?
  2. 它有什么作用?
  3. 应用程序现在如何启动?

阅读一些博客文章,其中提到 @main 替换了 @UIApplicationMain,为了使其工作,需要定义静态 main 方法。但是,AppDelegate 中没有 main 方法,应用程序启动没有问题。

macOS 项目创建于 Xcode12

import Cocoa

@main
class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(_ aNotification: Notification) {}

    func applicationWillTerminate(_ aNotification: Notification) {}
}

iOS 项目创建于 Xcode 12

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { return true }

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {}
}

@main属性表示这是app的入口,不能有多个结构

UIApplicationMain 首先实例化 UIApplication 并保留其实例作为共享应用程序实例 (UIApplication.shared),然后实例化标记为 @Main 的应用程序委托作为应用程序实例的委托。 main 方法作为 type method.

存在