官方解释:This function is called in the main entry point to create the application object and the application delegate and set up the event cycle.
在iOS开发中,新建项目之后Xcode会自动帮忙进行了很多配置,这导致我们一上手就进行开发,难免会对App启动流程的概念比较模糊,C语言中,程序的入口是main函数,这里什么是入口呢?应用程序是从哪里开始运行的呢?了解这个,不仅是稳固基础,而且对整个应用开发都很重要。
在Objective-C中:
由于Objective-C是面向对象的C,当然C的特性都有,其中也有一个main函数,这就是应用程序的入口。打开 main.m
函数,只有一行代码,而其中就是我们的主角 UIApplicationMain(_:_:_:_:)
,这个函数会创建若干对象,使应用得以运行。首先,该函数会创建一个 UIApplication
单例。接着根据传入的第四个参数创建相应的类实例,并将其设置为应用的委托对象。该对象会受到各种应用委托消息,例如,内存过低、应用关闭、进入后台运行状态或启动完毕。
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
在swift中:
swift中没有main文件,当然也就没有main函数,但是可以在Appdelegate.swift
文件中看到@UIApplicationMain
,当然,这就是Xcode为我们配置好的,其实swift也有main函数,或者说有这么个程序入口,只是@UIApplicationMain
帮我们自动生成了,就不用自己去写,也看不到。一般不需要改动,当然也可以自己配置入口来创建一个UIApplication子类。首先需要删除 @UIApplicationMain
或者注释掉,再新建一个main.swift
文件,添加以下代码
import UIKit
UIApplicationMain(Process.argc, Process.unsafeArgv, nil,
NSStringFromClass(AppDelegate))
这里可以把nil换成自己的UIApplication子类,再次编译问题解决。
网友评论