"@main"在 Xcode 12 中是什么意思?



Xcode 12支持在基于UIKit或AppKit的应用程序中使用@main代替@UIApplicationMain或@NSApplicationMain。源

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

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

阅读一些博客文章,其中说@main取代了@UIApplicationMain,为了使其工作,需要定义一个静态main方法。然而,AppDelegate中没有main方法,应用程序启动时没有问题。

Xcode 12中创建的macOS项目

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

在Xcode 12中创建的iOS项目

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>) {}
}

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

@main是属性,表示这是应用程序的入口点,不可能有多个结构。

最新更新