程序的入口是main函数.
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
main函数中执行了UIApplicationMain函数.
int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
UIApplicationMain函数做了几个工作:
1.初始化UIApplication对象. NSString *principalClassName 是UIApplication的类名.该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值.
2.创建了AppDelegate对象 NSString *delegateClassName 指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议
3.函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性
4.建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法)(这是在非storyboard启动的情况下,若是storyboard 则直接在info.list找storyboard了)
5.程序正常退出时UIApplicationMain函数才返回