iOS APP启动过程详解
2016-07-27 15:45
507 查看
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示:
那么UIApplicationMain函数到底做了哪些事情呢?这个函数主要负责三件 事情:
1.从给定的类名初始化应用程序对象,也就是初始化UIApplication或者子类对象的一个实例,如果你在这里给定的是nil,那么 系统会默认UIApplication类,也就主要是这个类来控制以及协调应用程序的运行。在后续的工作中,你可以用静态方法sharedApplication 来获取应用程序的句柄。
2.从给定的应用程序委托类,初始化一个应用程序委托。并把该委托设置为应用程序的委托,这里就有如果传入参数为nil,会调用函数访问 Info.plist文件来寻找主nib文件,获取应用程序委托。
3.启动主事件循环,并开始接收事件。
上面是UIApplicationMain函数的工作,接下来一个问题是应用程序视图的显示、消息的控制怎么办?下面就是UIApplication(或 者子类)对象的职责,这个对象主要做下面几件事:
1.负责处理到来的用户事件,并分发事件消息到应该处理该消息的目标对象(sender, action)。
2.管理以及控制视图,包括呈现、控制行为、当前显示视图等。
3.该对象有一个应用程序委托对象,当一些生命周期内重要事件(可以包括系统事件或者生命周期控制事件)发生时,应用程序通知该对象。例如,应用程序启 动、内存不够了或者应用程序结束等,让这些事件发生时,应用程序委托去响应。
通 过上面的分析,可以知道UIApplication对开发者来说,是一个黑箱,它也可以是。因为所有的操作,都可以由它的委托来帮我们完成,它只需要在 后面维护一些不可更改的东西,如事件消息分发和传递、给委托发送事件处理请求等等,如,应用程序加载处理完毕,它会发送消息给委托,然后委托可以在 applicationDidFinishLanching委托函数中去实现开发者想要的动作。利用XCODE在创建应用程序时,会默认实现一个应用程序 委托类。而对于加载的视图,则有视图相关的委托类来处理视图加载过程的生命事件。下面说明委托主要可以办哪些事情:
控制应用程序的行为
具体说明:
顺带说说UIViewController的控制
UIViewController是IOS顶层视图的载体及控制器,用户 与程序界面的交互都是由UIViewController来控制的。 UIViewController管理UIView的生命周期及资源的加载 与释放。
UIView UIView与UIWindow共同展示了应用用户界面。
UIViewController生命周期事件
理解了这些对你在做开发中肯定会有很大的帮助,祝你成功。
int UIApplicationMain ( int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName );
那么UIApplicationMain函数到底做了哪些事情呢?这个函数主要负责三件 事情:
1.从给定的类名初始化应用程序对象,也就是初始化UIApplication或者子类对象的一个实例,如果你在这里给定的是nil,那么 系统会默认UIApplication类,也就主要是这个类来控制以及协调应用程序的运行。在后续的工作中,你可以用静态方法sharedApplication 来获取应用程序的句柄。
2.从给定的应用程序委托类,初始化一个应用程序委托。并把该委托设置为应用程序的委托,这里就有如果传入参数为nil,会调用函数访问 Info.plist文件来寻找主nib文件,获取应用程序委托。
3.启动主事件循环,并开始接收事件。
上面是UIApplicationMain函数的工作,接下来一个问题是应用程序视图的显示、消息的控制怎么办?下面就是UIApplication(或 者子类)对象的职责,这个对象主要做下面几件事:
1.负责处理到来的用户事件,并分发事件消息到应该处理该消息的目标对象(sender, action)。
2.管理以及控制视图,包括呈现、控制行为、当前显示视图等。
3.该对象有一个应用程序委托对象,当一些生命周期内重要事件(可以包括系统事件或者生命周期控制事件)发生时,应用程序通知该对象。例如,应用程序启 动、内存不够了或者应用程序结束等,让这些事件发生时,应用程序委托去响应。
通 过上面的分析,可以知道UIApplication对开发者来说,是一个黑箱,它也可以是。因为所有的操作,都可以由它的委托来帮我们完成,它只需要在 后面维护一些不可更改的东西,如事件消息分发和传递、给委托发送事件处理请求等等,如,应用程序加载处理完毕,它会发送消息给委托,然后委托可以在 applicationDidFinishLanching委托函数中去实现开发者想要的动作。利用XCODE在创建应用程序时,会默认实现一个应用程序 委托类。而对于加载的视图,则有视图相关的委托类来处理视图加载过程的生命事件。下面说明委托主要可以办哪些事情:
控制应用程序的行为
- (void)applicationDidFinishLaunching:(UIApplication *)application 应用程序启动完毕。 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 当由于其它方法打开应用程序(如URL指定或者连接),通知委托启动完毕 - (void)applicationWillTerminate:(UIApplication *)application 通知委托,应用程序将在关闭 退出,请做一些清理工作。 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 通知委托,应用程序收到了为来自系统的内存不足警告。 -(void)applicationSignificantTimeChange:(UIApplication *)application 通知委托系统时间发生改变(主要是指时间属性,而不是具体的时间值) - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 打开指定的URL控制状态栏方位变化 – application:willChangeStatusBarOrientation:duration: 设备方向将要发生改变 – application:didChangeStatusBarOrientation: 活动状态改变 - (void)applicationWillResignActive:(UIApplication *)application 通知委托应用程序将进入非活动状态,在此期间,应用程序不接收消息或事件。 -(void)applicationDidBecomeActive:(UIApplication *)application 通知委托应用程序进入活动状态,请恢复数据
具体说明:
- (void)applicationWillResignActive:(UIApplication *)application 说明:当应用程序将要入非活动状态执行,在此期间,应用 程 序不接收消息或事件,比如来电话了 - (void)applicationDidBecomeActive:(UIApplication *)application 说明:当应用程序入活动状态执行,这个刚好跟上面那个方 法相反 - (void)applicationDidEnterBackground:(UIApplication *)application 说明:当程序被推送到后台的时候调用。所以要设置后台继 续运行,则在这个函数里面设置即可 UIApplication代理对象生命周期函数详解 - (void)applicationWillEnterForeground:(UIApplication *)application 说明:当程序从后台将要重新回到前台时候调用,这个刚好 跟上面的那个方法相反。 - (void)applicationWillTerminate:(UIApplication *)application 说明:当程序将要退出是被调用,通常是用来保存数据和一 些退出前的清理工作。这个需要要设置 UIApplicationExitsOnSuspend的键值 -(void)applicationDidReceiveMemoryWarning:(UIApplic ation *)application 说明:ios设备只有有限的内存,如果为应用程序分配了太多 内存操作系统会终止应用程序的运行,在终止前会执行这个 方法,通常可以在这里进行内存清理工作防止程序被终止 UIApplication代理对象生命周期函数详解 (void)applicationDidFinishLaunching:(UIApplication*)a pplication 说明:当程序载入后执行。 - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url 说明:当打开URL时执行。
顺带说说UIViewController的控制
UIViewController是IOS顶层视图的载体及控制器,用户 与程序界面的交互都是由UIViewController来控制的。 UIViewController管理UIView的生命周期及资源的加载 与释放。
UIView UIView与UIWindow共同展示了应用用户界面。
UIViewController生命周期事件
-(void)loadView 加载视图资源并初始化视图 - (void)viewDidLoad - (void)viewDidUnload 释放视图资源 - (void)viewWillAppear:(BOOL)animated 将要加载出视图 - (void)viewDidAppear:(BOOL)animated 视图出现 - (void)viewWillDisappear:(BOOL)animated 视图即将消失 (void)viewDidDisappear:(BOOL)animated 视图已经消失
理解了这些对你在做开发中肯定会有很大的帮助,祝你成功。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- 关于C#中排序函数的总结
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数