“@UIApplicationMain”是什么意思?

我刚刚创build了我的第一个Swift项目,在AppDelegate.swift有一行上面有一个类声明 – 为什么在那里?

 ... import UIKit import CoreData @UIApplicationMain // <- WHY IS IT HERE? class AppDelegate: UIResponder, UIApplicationDelegate { ... 

Swift中的@UIApplicationMain属性取代了在Objective-C项目中find的普通main.m文件(其目的是实现所有C程序入口点的main函数,并调用UIApplicationMain来启动Cocoa Touch运行循环和应用程序基础结构)。

在Objective-C中, UIApplicationMain函数提供的per-appconfiguration的主要(heh)位是指定你的应用程序的一个自定义类作为共享UIApplication对象的委托。 在Swift中,您可以通过将@UIApplicationMain属性添加到该类的声明中来轻松指定此类。 (如果你有理由,你也可以直接调用UIApplicationMain函数。在Swift中,你把这个调用放在main.swift文件的顶层代码中。)

@UIApplicationMain仅适用于iOS。 在OS X中,应用程序委托传统上被设置在Info.plist指定的主要nib文件中(对于Swift和ObjC一样) – 但是OS X故事板没有主要的nib文件,所以@NSApplicationMain在那里做同样的事情。

@UIApplicationMain属性是您的应用程序启动的main.m文件&和入口点的替代。

还有一件事你的程序可以在没有这个@UIApplicationMain的情况下工作,所有你需要做的就是注释// @ UIApplicationMain`在目标c中创build与main.m相同的main.swift,并写下面的代码。 这将是您的应用程序的入口点

 import Foundation class FLApplication: UIApplication { override func sendEvent(event: UIEvent!) { println("Entry Point") // this is an example } } 

AppDelegate.swift源文件有两个主要function:

  • 它为您的应用程序创build入口点,并为您的应用程序提供input事件的运行循环。 这项工作是由UIApplicationMain属性(@UIApplicationMain)完成的,该属性出现在文件的顶部。 UIApplicationMain创build一个负责pipe理应用程序生命周期和应用程序委托对象的应用程序对象。

  • 它定义了AppDelegate类,这是应用程序委托对象的蓝图。 应用程序委托创build了应用程序内容的绘制窗口,并提供了一个位置来响应应用程序中的状态转换。 AppDelegate类是您编写自定义应用程序级代码的地方。

现在Swift文档已经更新了,下面是相关的一段话:

NSApplicationMain

将此属性应用于类以指示它是应用程序委托。 使用这个属性相当于调用NSApplicationMain( :)函数并将该类的名称作为委托类的名称。

如果不使用此属性,请使用调用NSApplicationMain( :)函数的main()函数提供main.swift文件。 例如,如果您的应用程序使用NSApplication的自定义子类作为其主类,则调用NSApplicationMain函数而不是使用此属性。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html

@UIApplicationMain是一个应用于AppDelegate类声明的属性,用于提供关于这个类的更多信息。

在这种情况下,属性@UIApplicationMain指示类AppDelegate是您的应用程序的应用程序委托。

UIApplicationMain将此属性应用于类以指示它是应用程序委托。 使用该属性相当于调用UIApplicationMain函数,并将该类的名称作为委托类的名称。 (资源)