“@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函数而不是使用此属性。
@UIApplicationMain是一个应用于AppDelegate类声明的属性,用于提供关于这个类的更多信息。
在这种情况下,属性@UIApplicationMain指示类AppDelegate是您的应用程序的应用程序委托。
UIApplicationMain将此属性应用于类以指示它是应用程序委托。 使用该属性相当于调用UIApplicationMain函数,并将该类的名称作为委托类的名称。 (资源)