全面解析IOS应用启动都做了些什么
2017-05-08 14:25
232 查看
其实IOS一个程序APP的入口就是我们程序的main文件里面的main函数。
int main(int argc, char *argv[])
{
}
UIApplicationMain函数是程序的关键点,下面是对这个函数的分析:
UIApplicationMain()函数是初始化程序的核心,它接受4个参数。
argc和argv:来自于main()接受的两个参数;
第三个参数:主要类(principal class),必须是UIApplication或其子类的名字,它代表着当前iPhone程序本身,这个程序会去读info.plist文件获取配置信息,其中包括主nib文件的值,一般为MainWindow(.xib);如果该参数为nil,则默认为@”UIApplication”;
第四个参数:代理类(delegate class),MainWindow.xib文件中遵循UIApplicationDelegate的类的类名,因为UIApplication定义了一个delegte变量,这个变量应该遵循UIApplicationDelegate,负责控制程序的运行,如果主nib文件没有这个类,你应该自定义一个这样的类,并将第四个参数改为这个类的类名,否则这个程序不知道如何进行运作,因为前三个参数代表应用程序本身,它除了把应用的事件循环启动起来,并读取info.plist里的配置信息,不做其它任何事情。如果该参数为nil,则程序假设程序的代理来自Main nib文件。
我们来看以下iOS程序的声明周期图:
![](https://img-blog.csdn.net/20170508142025640?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2F0ZXJ0ZWtocXg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
UIApplicationMain函数到底做了哪些事情呢?这个函数主要负责三件事情:
1)从给定的类名初始化应用程序对象,也就是初始化UIApplication或者子类对象的一个实例,如果你在这里给定的是nil,那么 系统会默认UIApplication类,也就主要是这个类来控制以及协调应用程序的运行。在后续的工作中,你可以用静态方法sharedApplication 来获取应用程序的句柄。
2)从给定的应用程序委托类,初始化一个应用程序委托。并把该委托设置为应用程序的委托,这里就有如果传入参数为nil,会调用函数访问 Info.plist文件来寻找主nib文件,获取应用程序委托。
3)启动主事件循环,并开始接收事件。 (UIApplication开始工作)
int main(int argc, char *argv[])
{
@autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); }
}
UIApplicationMain函数是程序的关键点,下面是对这个函数的分析:
UIApplicationMain()函数是初始化程序的核心,它接受4个参数。
argc和argv:来自于main()接受的两个参数;
第三个参数:主要类(principal class),必须是UIApplication或其子类的名字,它代表着当前iPhone程序本身,这个程序会去读info.plist文件获取配置信息,其中包括主nib文件的值,一般为MainWindow(.xib);如果该参数为nil,则默认为@”UIApplication”;
第四个参数:代理类(delegate class),MainWindow.xib文件中遵循UIApplicationDelegate的类的类名,因为UIApplication定义了一个delegte变量,这个变量应该遵循UIApplicationDelegate,负责控制程序的运行,如果主nib文件没有这个类,你应该自定义一个这样的类,并将第四个参数改为这个类的类名,否则这个程序不知道如何进行运作,因为前三个参数代表应用程序本身,它除了把应用的事件循环启动起来,并读取info.plist里的配置信息,不做其它任何事情。如果该参数为nil,则程序假设程序的代理来自Main nib文件。
我们来看以下iOS程序的声明周期图:
UIApplicationMain函数到底做了哪些事情呢?这个函数主要负责三件事情:
1)从给定的类名初始化应用程序对象,也就是初始化UIApplication或者子类对象的一个实例,如果你在这里给定的是nil,那么 系统会默认UIApplication类,也就主要是这个类来控制以及协调应用程序的运行。在后续的工作中,你可以用静态方法sharedApplication 来获取应用程序的句柄。
2)从给定的应用程序委托类,初始化一个应用程序委托。并把该委托设置为应用程序的委托,这里就有如果传入参数为nil,会调用函数访问 Info.plist文件来寻找主nib文件,获取应用程序委托。
3)启动主事件循环,并开始接收事件。 (UIApplication开始工作)
相关文章推荐
- 全面解析iOS应用中自定义UITableViewCell的方法
- 【全面解析DeepZoom 之三】建立DeepZoom应用
- 全面解析终极移动终端“MID”(三):MID集成热点应用
- iOS应用开发:什么是ARC?
- iOS应用开发:什么是ARC?
- IOS开发之程序首次启动时加载关于程序应用的简介
- 全面解析BOOT.INI文件和让启动菜单“锦上添花”
- <iOS>NSXMLParser具体解析xml的应用详解
- iOS应用突然间无法启动的怪异问题 LOG:A valid provisioning profile for this executable was not found
- IOS开发之程序首次启动时加载关于程序应用的简介
- IOS应用的启动流程
- 多重启动光盘制作全面解析
- memcached全面解析--memcached的应用和兼容程序
- iOS 上的「来电归属地+超豪华通讯录专业版」这个应用的原理是什么?
- iOS应用开发:什么是ARC?
- 全面解析终极移动终端“MID”(二):支撑强大MID的底层技术突破及鲜活应用模式.
- 一段stk发短信的数据,不知道什么应用的,snooper解析乱码
- 全面解析hash函数的各种应用(持续更新)
- iOS开发之应用首次启动显示用户引导
- 让iOS的应用程序在点击设备的home键返回桌面后,再次打开应用进入启动画面