面试总结 - App启动逻辑

App启动逻辑

应用启动时,会先进入main函数,main函数是整个应用的入口。内部会调用UIApplicationmain函数,该函数会创建UIApplication对象以及UIApplication的代理APPDelegate,并且会开启消息循环(程序不死的原因),当监听到有系统事件时,就会通知Appdelegate做处理。每个应用都有自己的UIApplication,他是一个单例,可以通过【UIApplication shareapplication】获取到他,利用该对象可以进行一些系统级别的操作。启动完毕会用didFinishlaunch方法,在这个方法中,创建UIWindow,给window赋值属性,以及设置根视图。如果是storyboard,会根据info.plist中找对应的程序入口storyboard指向的vc,显示窗口。(storyboard 和xib最大的区别在于,stroyboard是基于控制器的,而非视图或窗口)

具体执行流程

  1. 程序入口
    进入main函数,设置AppDelegate称为函数的代理

  2. 程序完成加载
    [AppDelegate application:didFinishLaunchingWithOptions:]

  3. 创建window窗口

  4. 程序被激活
    [AppDelegate applicationDidBecomeActive:]

  5. 当点击command+H时(针对模拟器,手机是当点击home键)
    程序取消激活状态
    [AppDelegate applicationWillResignActive:];
    程序进入后台
    [AppDelegate applicationDidEnterBackground:];

  6. 点击进入工程
    程序进入前台
    [AppDelegate applicationWillEnterForeground:]
    程序被激活
    [AppDelegate applicationDidBecomeActive:];

分析

对于applicationWillResignActive(非活动)与applicationDidEnterBackground(后台)这两个的区别
  • applicationWillResignActive(非活动):
    比如当有电话进来或短信进来或锁屏等情况下,这时应用程序挂起进入非活动状态,也就是手机界面还是显示着你当前的应用程序的窗口,只不过被别的任务强制占用了,也可能是即将进入后台状态(因为要先进入非活动状态然后进入后台状态)

  • applicationDidEnterBackground(后台):
    指当前窗口不是你的App,大多数程序进入这个后台会在这个状态上停留一会,时间到之后会进入挂起状态(Suspended)。如果你程序特殊处理后可以长期处于后台状态也可以运行。
    Suspended (挂起): 程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。

applicationWillResignActive(非活动)
该函数里面主要执行操作:
a . 暂停正在执行的任务
b. 禁止计时器
c. 减少OpenGL ES帧率
d. 若为游戏应暂停游戏

applicationDidEnterBackground(已经进入后台)
该方法用来:
a. 释放共享资源
b. 保存用户数据(写到硬盘)
c. 作废计时器
d. 保存足够的程序状态以便下次修复;

applicationWillTerminate
程序即将退出时调用。记得保存数据

发布了218 篇原创文章 · 获赞 19 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/songzhuo1991/article/details/104883727