“@UIApplicationMain”是啥意思?

Posted

技术标签:

【中文标题】“@UIApplicationMain”是啥意思?【英文标题】:What does "@UIApplicationMain" mean?“@UIApplicationMain”是什么意思? 【发布时间】:2014-08-22 08:48:03 【问题描述】:

我刚刚创建了我的第一个 Swift 项目,在 AppDelegate.swift 中的类声明上方有一行 - 为什么会在那里?!

...
import UIKit
import CoreData

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

【问题讨论】:

【参考方案1】:

Swift 中的@UIApplicationMain 属性替换了在Objective-C 项目中找到的琐碎的main.m 文件(其目的是实现作为所有C 程序入口点的main 函数并调用UIApplicationMain 来启动Cocoa Touch 运行循环和应用基础架构)。

在 Objective-C 中,UIApplicationMain 函数提供的每个应用程序配置的主要 (heh) 位是将应用程序的自定义类之一指定为共享 UIApplication 对象的委托。在 Swift 中,您可以通过在该类的声明中添加 the @UIApplicationMain attribute 来轻松指定该类。 (如果有理由,您仍然可以直接调用 UIApplicationMain 函数。在 Swift 中,您将该调用放在 main.swift 文件中的***代码中。)

@UIApplicationMain 仅适用于 ios。在 OS X 中,应用程序委托通常设置在由 Info.plist 指定的主 nib 文件中(对于 Swift 和 ObjC 相同)——但对于 OS X 故事板,没有主 nib 文件,所以 @NSApplicationMain 做同样的事情那里。

【讨论】:

在 The Swift Programming Language 的第 58 页上,我发现 Attributes 部分很有趣。 我会在我的回答中引用文档,但目前似乎还没有这个属性。您找到的 Attributes 页面是您可能找到它的地方。 现在有UIApplicationMain 的描述。 developer.apple.com/library/ios/documentation/Swift/Conceptual/… 是你的最后一句话,请注意 OS X 具有等效的 @NSApplicationMain @UIApplicationMain 也适用于 tvOS【参考方案2】:

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

您的程序可以在没有此 @UIApplicationMain 的情况下运行的另一件事是注释 //@UIApplicationMain` 在目标 c 中创建与 main.m 相同的 main.swift 并编写以下代码。 这将是您的应用程序的入口点

import Foundation
class FLApplication: UIApplication

    override func sendEvent(event: UIEvent!)
    
        println("Entry Point") // this is an example
    

【讨论】:

如果我这样做,它会编译并运行,但在安装应用程序后完成,并且永远不会调用 sendEvent。所以呢? :) 更多信息在这里:***.com/questions/24020000/… — 但我再次没有登陆 sendEvent... @StuFFmc 感谢您提供此信息。我也没有调用 sendEvent 方法。 Foundation 导入,FLApplication,没有声明任何使用子类的随机子类...对不起,除了第一句之外,这个答案没有任何意义。【参考方案3】:

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

它创建应用程序的入口点和一个运行循环 向您的应用程序输入事件。这项工作由 UIApplicationMain 完成 (@UIApplicationMain) 属性,显示在顶部 文件。 UIApplicationMain 创建一个应用程序对象 负责管理应用程序和应用程序的生命周期 委托对象。

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

【讨论】:

嘿@Manju.......我已经将我的 UIApplication main 覆盖为 TimerUiApplication............我有一个变量...... .....我如何从我的 uiViewController 修改我的 UIApplication 的那个变量............【参考方案4】:

现在 Swift 文档更新了,下面是相关段落:

NSApplicationMain

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

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

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

【讨论】:

【参考方案5】:

@UIApplicationMain 是一个应用于类的属性 - 在下面声明 - AppDelegate,以提供有关该类的更多信息。

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

【讨论】:

【参考方案6】:

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

【讨论】:

以上是关于“@UIApplicationMain”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C:UIApplicationMain第四个参数

不同UIApplicationMain时引用appDelegate

swift 在AppDelegate.swift中不需要`@UIApplicationMain`

Xcode 调试器不再显示违规行,而是始终显示 UIApplicationMain

GSRegisterPurpleNamedPort SIGABRT 在 UIApplicationMain 在应用程序委托开始运行任何代码之前

“?”是啥意思?在 Erlang 中是啥意思? [复制]