Swift项目的main函数为何消失了?如何把它找出来?

Swift项目的main函数为何消失了?如何把它找出来?,第1张

概述OC项目中的main函数 大家是否发现,以前用OC语言创建的项目,一定会有一个main.m文件,里面有一个main函数,在这个函数中唤醒app。如果在app启动时放置断点,可以看到应用程序调用栈,如下图 main函数作为程序启动后的第二个函数被调用,然后在main函数中再启动UIApplication,并绑定AppDelegate Swift项目中的main函数为何隐藏 创建过Swift项目的童鞋 @H_403_1@OC项目中的main函数

大家是否发现,以前用OC语言创建的项目,一定会有一个main.m文件,里面有一个main函数,在这个函数中唤醒app。如果在app启动时放置断点,可以看到应用程序调用栈,如下图

main函数作为程序启动后的第二个函数被调用,然后在main函数中再启动UIApplication,并绑定AppDelegate

Swift项目中的main函数为何隐藏

创建过Swift项目的童鞋应该会发现,项目中没有一个名为main.swift的文件,为什么app的入口没有了?官方文档的说法是这样的

In Xcode,Mac templates default to including a “main.swift” file,but for iOS apps the default for new iOS project templates is to add @UIApplicationMain to a regular Swift file. This causes the compiler to synthesize a mainentry point for your iOS app,and eliminates the need for a “main.swift” file.

这段话的意思是,Swift项目中添加了@UIApplicationMain 到swift文件中,使得编译器合成了一个app入口,所以不需要main.swift文件

细心的童鞋会发现AppDelegate文件中多了个@UIApplicationMain的标志,启动app并放置断点,会发现其实main函数还是存在的

可能苹果认为我们并不需要自行配置app入口,所以干脆简化了项目配置,使用更加简单的方式启动应用,但有时候我们可能需要自己配置入口,例如我们要创建一个UIApplication的子类时

main.swift

如果你希望通过自行配置入口的方式来创建一个UIApplication子类,那么就要创建一个main.swift文件

首先创建一个swift文件,命名为main
main.swift中代码如下

import Foundationimport UIKitUIApplicationMain(Process.argc,Process.unsafeArgv,NsstringFromClass(UIApplication),NsstringFromClass(AppDelegate))

这里把 UIApplication 换成你自定义的 Application,Process 枚举在Xcode6.3以上才定义。如果你正在使用Xcode6.2以下的版本,稍微替换一下UIApplicationMain函数中代码

UIApplicationMain(C_ARGC,C_ARGV,NsstringFromClass(AppDelegate))

写好main.swift之后,还需要把AppDelegate中的@UIApplicationMain注释掉或者删掉

重新运行项目,app就能正常启动了

main函数的参数

以前OC的main函数的argv参数是一个字符串指针,打印出来后是应用程序的路径。swift中main函数的 Process.unsafeArgv 参数变成了一串十六进制数字,应该也是代表应用程序地址。至于为何要修改成数字,也许这是出于安全性考虑吧

总结

以上是内存溢出为你收集整理的Swift项目的main函数为何消失了?如何把它找出来?全部内容,希望文章能够帮你解决Swift项目的main函数为何消失了?如何把它找出来?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1087019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存