iOS:App的启动与Application的简介

程序的启动原理

1、main函数

2、UIApplicationMain

创建UIApplication对象

创建UIApplication的delegate对象

main函数会执行一个UIApplicationMain这个函数,intUIApplicationMain(int argc,char*argv[],NSString *principalClassName,NSString *delegateClassName);argc、argv:直接传递给UIApplicationMain进行相关处理即可

principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或者是子类)。如果是nil,则用UIApplication类作为默认值。

delegateClassName:指定应用程序的代理类,该类必须准守ApplicationDelegate协议

UIApplicationMain函数或根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性。

接着会创建应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序调用delegate对象的application:didFinishLaunchingWithOptions方法)

3、delegate对象开始处理(监听)系统事件(没有storyboard)

程序启动完毕的时候,就会调用代理的application:didFinishLaunchingWithOptions方法

在application:didFinishLaunchingWithOptions;中创建UIWindow

创建和设置UIWindow中的rootViewController

显示窗口

补充 Appdelegate中的代理方法

当程序启动完毕的时候就会调用(系统自动调用)application:didFinishLaunchingWithOptions

即将失去活动状态的时候调用(失去焦点,不可交互)applicationWillResignActive

重新获取焦点(能够和用户交互)applicationDidBecomeActive

应用进入后台的时候调用(一般在该方法中保存应用的数据和状态)applicationDidEnterBackground

应用即将进入前台的时候调用(一般在该方法中恢复应用的数据状态和数据)applicationWillEnterForeground

应用程序即将被销毁的时候调用该方法(程序处于挂起的时候无法调用该方法)applicationWillTerminate

应用程序接收到内存警告的时候调用(一般在该方法中释放掉不需要的内存)applicationDidReceiveMemoryWarning

4、根据info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)

创建UIWindow

创建和设置UIWindow的rootViewController

显示窗口

总结

程序启动的时候 Not runing —>Inactive(前台非活跃状态) —>Active(前台活跃状态)

Not runing —>Inactive 调用application:didFinishLaunchingWithOptions方法 发出UIApplication-DidFinishLaunchingNotification通知

Inactive —>Active 调用applicationDidBecomeActive方法 发出 UIApplicationDidBecomeActive - Notification 通知

点击home键 Active —>Inactive —>Background —>Suspended

Active —>Inactive 调用 applicationWillResignActive 方法发出 UIApplicationWillResignActive -Notification 通知

Inactive —>Background 从非活跃状态进入到后台

Background —>Suspended 调用applicationDidEnterBackground方法 发送 UIApplicationDidEnterBackground-Notfication 通知

程序挂起到重新运行场景Suspended —>Background —>Inactive —>Active

Suspended —>Background 调用 applicationWillEnterForeground 方法 发出UIApplicationWillEnterBacakgroundNotfication 通知

Background —>Inactive 从后台状态进入到非活跃状态

Inactive —>Active调用 applicationDidBecomeActive 方法 发送 UIApplicationDidBecomeActiveNotfication通知


求不喜勿喷,有错的地方请各位指出,看到后会立刻改正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 当用户点击应用图标之后,应用就开始启动。应用启动完成后,就会展示一系列的视图,和用户进行各种各样的交互(如滑动、点...
    Pandakingli阅读 737评论 0 1
  • 0. 引子 iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提...
    i爱吃土豆的猫阅读 553评论 0 0
  • 今天上午听了两位大卡伙伴的分享。 其中一个伙伴通过一场电影影评道出了保险增员以及保险从业人员的点。其实也是做人的点...
    米勒Li阅读 244评论 0 0
  • 喜欢但是不爱,爱却又并不喜欢,可见喜欢与爱并不是一码事。喜欢,是看某物好甚至极好,随之而来的念头是:欲占有。爱,则...
    苟且52阅读 163评论 0 0
  • 1.选择一个你相对了解/感兴趣的商业APP,使用商业模式画布9个模块对其进行分析。 2.阅读一篇以上 busine...
    1a78f0a15ff2阅读 280评论 1 0