Xcode 12支持在基于UIKit或AppKit的应用程序中使用@main代替@UIApplicationMain或@NSApplicationMain。源
新创建的Xcode 12项目现在使用@main
来指示应用程序的起点。
- 这是什么意思
- 它做什么
- 应用程序现在如何启动
阅读一些博客文章,其中说@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
是属性,表示这是应用程序的入口点,不可能有多个结构。