首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >@main和@uiapplicationmain有什么区别?

@main和@uiapplicationmain有什么区别?
EN

Stack Overflow用户
提问于 2021-05-07 04:39:30
回答 2查看 1.7K关注 0票数 8

我需要帮助理解何时使用@main@uiapplicationmain

据我所知,@uiapplicationmain是一种更容易调用uiapplicationmain(:::)的方法,在这里,在@uiapplicationmain之后生成的类被用作App。我还知道它还创建了一个UIApplication

我也知道,应用程序委托成为项目的入口点。

据我所读,我被告知@main也是一个入口点,但它需要一个主函数。

我想知道的是,主要切入点是什么意思。就像Xcode为了使它成为“入口”点所做的事情。以及整个@main是如何工作的,就像它与@uiapplicationmain有何不同,以及它对Xcode运行代码的方式做了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-11 03:22:19

所有代码都有一个入口点:调用该代码的人实际调用的位置。包含许多Swift文件的整个程序是如何真正开始的呢?我们需要一个整个程序的入口点,运行时将调用这个入口点来启动我们。

在Swift中,这是main.swift文件。它的工作是调用UIApplicationMain,它创建一些实例,包括应用程序和应用程序委托,并使事件循环运行(并在应用程序运行的其余时间保持运行)。最小的main.swift文件必须如下所示:

代码语言:javascript
运行
复制
import UIKit
UIApplicationMain(
    CommandLine.argc, CommandLine.unsafeArgv, nil, 
        NSStringFromClass(AppDelegate.self)
)

但是,从来没有人使用过main.swift文件!这是样板,那为什么要麻烦呢?相反,您可以说是@main,然后在幕后为您生成一个main.swift文件。特别是,将属性@main放在AppDelegate类上,以便main.swift生成器知道要实例化哪个类作为应用程序委托。

还有两件事要知道:

  • 在SWIFT5.3之前,@main被称为@UIApplicationMain。从这个角度来看,他们是相同的,两个名称相同的东西。
  • 在SWIFT5.3和Xcode 12中,您可以将自己的一种类型指定为@main,并为其提供一个静态main函数,您可以在main.swift文件中做任何您应该做的事情。这是@UIApplicationMain无法做到的:
代码语言:javascript
运行
复制
    @main
    struct MyMain {
        static func main() -> Void {
             UIApplicationMain(
                 CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(AppDelegate.self)
             )
        }
    }
票数 11
EN

Stack Overflow用户

发布于 2021-05-07 04:50:40

@main是在iOS 14中引入的新SwiftUI生命周期的一部分。

@uiapplicationmainUISceneDelegateUIApplicationDelegate的旧版本,但仍在使用中。两者都代表了应用程序的生命周期。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67429098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档